├── .browserslistrc ├── .github └── workflows │ └── ci.yml ├── .gitignore ├── .snyk ├── DAP 6.8 - DAP Code Capabilities Summary and Reference.pdf ├── DAP Code 6.8 - Quick Guide.docx (1).pdf ├── Dockerfile ├── Federated.js.map ├── README.md ├── SECURITY.md ├── Universal-Federated-Analytics-Min.js ├── Universal-Federated-Analytics.js ├── changelog ├── changelog-2.0.md ├── changelog-3.1.md ├── changelog-4.0.md └── changelog-4.1.md ├── cucumber.yml ├── documentation ├── Certified_Analyst_Exam_PDF.pdf ├── Certified_Analyst_Study_Guide.pdf ├── Copy of DAP Decision Tree.png ├── DAP Code Placement Decision Tree (1).png ├── DAP Code Placement Decision Tree (2).png ├── DAP Code Placement Decision Tree.png ├── DAP Decision Tree.png ├── DAP-Criteria.png ├── DAP-critera.png ├── DAP_Custom_Events (1).pdf ├── DAP_GA4_Video2.pdf ├── DAP_GA4_Video3.pdf ├── DAP_Video1_GA4.pdf ├── GSA DAP 4.0 - DAP Code Capabilities Summary and Reference.pdf ├── GSA DAP 4.0 - Quick Guide.pdf ├── GSA DAP 4.0 - Release Notes.pdf ├── GSA DAP 4.1 - DAP Code Capabilities Summary and Reference.pdf ├── GSA DAP 4.1 - Quick Guide.pdf ├── GSA DAP 4.1 - Release Notes.pdf ├── GSA DAP 6.8 - Release Notes.docx.pdf ├── GSA DAP 6.9 - DAP Code Capabilities Summary and Reference.docx.pdf ├── GSA DAP 6.9 - Release Notes.pdf ├── GSA DAP 6.9 Quick Guide.pdf ├── GSA DAP 7.0 - DAP Code Capabilities Summary and Reference.docx.pdf ├── GSA DAP 7.0 - Quick Guide.pdf ├── GSA DAP 7.0 - Release Notes.docx.pdf ├── GSA DAP Current - Quick Guide.pdf └── architecture-decision-records │ ├── 001-support-pinned-deployment.md │ └── template.md ├── errorpages └── 403 ├── eslint.config.js ├── features ├── README.md ├── autotracker_download.feature ├── basic_page_load.feature ├── configuration.feature └── support │ ├── dapconfig.js │ ├── hooks.js │ └── step_definitions │ ├── browser_steps.js │ ├── dataLayer_steps.js │ ├── interaction_steps.js │ └── loading_steps.js ├── hostnames.json ├── nginx-test.conf.template ├── package-lock.json ├── package.json ├── querystrings.json └── test_site ├── index.html └── youtube.html /.browserslistrc: -------------------------------------------------------------------------------- 1 | # Supported browsers 2 | last 2 versions 3 | not dead 4 | > 0.1% 5 | Firefox ESR -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | on: 2 | push: 3 | pull_request: 4 | 5 | jobs: 6 | lint: 7 | runs-on: ubuntu-latest 8 | steps: 9 | - name: Code Checkout 10 | uses: actions/checkout@v4 11 | - name: Install Node 12 | uses: actions/setup-node@v4 13 | with: 14 | node-version: "lts/*" 15 | cache: 'npm' 16 | - name: Install node dependencies 17 | run: npm ci --timing 18 | - name: Lint javascript 19 | run: npm run lint 20 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules -------------------------------------------------------------------------------- /.snyk: -------------------------------------------------------------------------------- 1 | # Snyk (https://snyk.io) policy file 2 | --- 3 | exclude: 4 | code: 5 | # Exclude non-code directories and files for only local development use. 6 | - changelog/** 7 | - documentation/** 8 | - errorpages/** 9 | - features/** 10 | - test_site/** 11 | - Dockerfile 12 | - eslint.config.js 13 | -------------------------------------------------------------------------------- /DAP 6.8 - DAP Code Capabilities Summary and Reference.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digital-analytics-program/gov-wide-code/1817f8a53949c98953ec6b6015135c686805c99d/DAP 6.8 - DAP Code Capabilities Summary and Reference.pdf -------------------------------------------------------------------------------- /DAP Code 6.8 - Quick Guide.docx (1).pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digital-analytics-program/gov-wide-code/1817f8a53949c98953ec6b6015135c686805c99d/DAP Code 6.8 - Quick Guide.docx (1).pdf -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM nginx 2 | ARG DAP_ENV='dev' 3 | ENV DAP_ENV=${DAP_ENV} 4 | COPY test_site Universal-Federated-Analytics-Min.js Federated.js.map /usr/share/nginx/html/ 5 | COPY nginx-test.conf.template /etc/nginx/conf.d/ 6 | RUN envsubst '${DAP_ENV}' < /etc/nginx/conf.d/nginx-test.conf.template > /etc/nginx/conf.d/default.conf 7 | -------------------------------------------------------------------------------- /Federated.js.map: -------------------------------------------------------------------------------- 1 | { 2 | "version":3, 3 | "file":"Universal-Federated-Analytics-Min.js", 4 | "lineCount":56, 5 | "mappings":"AA0BC,SAAS,EAAG,CA8EXA,QAASA,EAAI,EAAG,CACdC,SAAUC,CAAAA,IAAV,CAAeC,SAAf,CADc,CA0NhBC,QAASA,EAAkB,CAACC,CAAD,CAAI,CAC7B,OAAQA,CAAEC,CAAAA,QAAF,EAAaC,CAAAA,WAAb,EAAR,EACE,KAAK,MAAL,CACA,KAAK,IAAL,CACA,KAAK,KAAL,CACA,KAAK,GAAL,CACE,MAAO,CAAA,CACT,MAAK,OAAL,CACA,KAAK,KAAL,CACA,KAAK,IAAL,CACA,KAAK,GAAL,CACE,MAAO,CAAA,CACT,SACE,MAAOF,EAZX,CAD6B,CAqB/BG,QAASA,EAAc,CAACH,CAAD,CAAI,CACzBA,CAAA,CAAIA,CAAEE,CAAAA,WAAF,EACJF,EAAA,CAAIA,CAAEI,CAAAA,KAAF,CAAQ,kBAAR,CACJ,OAAO,KAAP,GAAgBJ,CAAhB,EAAqB,CAArB,CAAyBA,CAAEK,CAAAA,MAA3B,EAAqCL,CAAA,CAAE,CAAF,CAArC,GAA8CM,CAAQC,CAAAA,SAAR,CAAkB,CAAlB,CAAqBL,CAAAA,WAArB,EAHrB,CAiB3BM,QAASA,EAAc,CAACC,CAAD,CAAIT,CAAJ,CAAO,CAC5B,GAAI,CAEF,MADAA,EACQ,CADJA,CAAEU,CAAAA,OAAF,CAAU,KAAV,CAAiB,GAAjB,CAAsBA,CAAAA,OAAtB,CAA8B,WAA9B,CAA2C,EAA3C,CAA+CN,CAAAA,KAA/C,CAAqD,gBAArD,CACI,CAAC,IAAD,GAAUJ,CAAV,CAAeA,CAAA,CAAE,CAAF,CAAKE,CAAAA,WAAL,EAAf,CAA0C,GAAN,GAAAO,CAAA,CAAY,mBAAZ;AAAkCE,CAAA,EAAlC,CAA0C,WAFpF,CAGF,MAAOC,CAAP,CAAU,EAJgB,CA0J9BC,QAASA,EAAU,CAACb,CAAD,CAAIc,CAAJ,CAAO,CAExB,IADA,IAAIC,EAAU,EAAd,CACSC,EAAI,CAAb,CAAgBA,CAAhB,CAAoBV,CAAQC,CAAAA,SAAUF,CAAAA,MAAtC,CAA8CW,CAAA,EAA9C,CACE,GAAI,CACFD,CAAA,EAAWT,CAAQW,CAAAA,QAAnB,CAA8BD,CAA9B,CAAkC,GADhC,CAGJ,MAAOE,CAAP,CAAW,EAETN,CAAAA,CAAIO,CAAA,CAAaC,CAAA,CAAYN,CAAZ,CAAb,CAA6B,MAA7B,CACRF,EAAA,CAAIS,CAAA,CAAaT,CAAb,CACJA,EAAA,CAAIU,CAAA,CAAeV,CAAf,CACJA,EAAEG,CAAAA,OAAF,CAAYA,CAAQL,CAAAA,OAAR,CAAgB,IAAhB,CAAsB,EAAtB,CACZE,EAAEW,CAAAA,oBAAF,CAAyBvB,CACzBL,EAAA,CAAK,OAAL,CAAcK,CAAd,CAAiBY,CAAjB,CAbwB,CAsB1BY,QAASA,EAAqB,CAACxB,CAAD,CAAI,CAChCa,CAAA,CAAW,qBAAX,CAAkCb,CAAlC,CAAsCyB,EAAA,CAAW,CAAA,CADjB,CAiHlCC,QAASA,EAAgB,EAAG,CAO1B,IAAIC,EAAcA,QAAS,CAAC3B,CAAD,CAAI,CACzB4B,CAAAA,CAAK5B,CAAE6B,CAAAA,IAAK3B,CAAAA,WAAP,EAAqBQ,CAAAA,OAArB,CAA6B,SAA7B,CAAwC,EAAxC,CAA4CoB,CAAAA,KAA5C,CAAkD9B,CAAE+B,CAAAA,QAApD,CAAA,CAA8D,CAA9D,CAAiED,CAAAA,KAAjE,CAAuE,GAAvE,CAAiFE,EAAAA,CAAMJ,CAAA,CAAGA,CAAGvB,CAAAA,MAAN,CAAe,CAAf,CAChG,OAAyD,KAAzD,EAAI2B,CAAI5B,CAAAA,KAAJ,CAAU,IAAI6B,MAAJ,CAAW,IAAX,CAAkB3B,CAAQ4B,CAAAA,IAA1B,CAAiC,IAAjC,CAAV,CAAJ,CACSF,CADT,CAIS,CAAA,CANoB,CAA/B,CA4BIG,EAAgBA,QAAS,CAACC,CAAD,CAAQ,CACnC,GAAI,CACF,GAAI,WAAJ,GAAoBA,CAAMC,CAAAA,IAA1B,EAAmC,SAAnC;AAAiDD,CAAMC,CAAAA,IAAvD,EAA+D,EAA/D,GAAsED,CAAME,CAAAA,OAA5E,CACE,GAA8B,GAA9B,GAAIF,CAAMG,CAAAA,MAAOC,CAAAA,QAAjB,EAAmE,IAAnE,GAAqCJ,CAAMG,CAAAA,MAAOE,CAAAA,OAAb,CAAqB,GAArB,CAArC,CAAyE,CAAA,IACnE3B,EAAIR,CAAQoC,CAAAA,aADuD,CACxC9B,EAAI,EADoC,CAEnE+B,EAAI,EAF+D,CAGrEC,EAAI,EAHiE,CAIrEC,EAAI,wDAJiE,CAKrEC,EACE,qFANmE,CAOrEC,EAAI,EAPiE,CAQrEtC,EAAI,EARiE,CASrEuC,EAAI,EATiE,CAUrEhC,EAAI,eAViE,CAWnEhB,EAAIoC,CAAMG,CAAAA,MAAOE,CAAAA,OAAb,CAAqB,GAArB,CACJ,YAAJ,GAAoBL,CAAMC,CAAAA,IAA1B,CACE5B,CADF,CACM,aADN,CAGS,SAHT,GAGuB2B,CAAMC,CAAAA,IAH7B,EAGqC,EAHrC,GAG4CD,CAAME,CAAAA,OAHlD,GAIE7B,CAJF,CAIM,qBAJN,CAOA,IAAIoC,CAAEI,CAAAA,IAAF,CAAOjD,CAAE6B,CAAAA,IAAT,CAAJ,EAAsBiB,CAAEG,CAAAA,IAAF,CAAOjD,CAAE6B,CAAAA,IAAT,CAAtB,EAAwCb,CAAEiC,CAAAA,IAAF,CAAOjD,CAAE6B,CAAAA,IAAT,CAAxC,CACE,GAAI,CACFiB,CAAEG,CAAAA,IAAF,CAAOjD,CAAE6B,CAAAA,IAAT,CAAA,EACMe,CAAD,CAAK5C,CAAE+B,CAAAA,QAAS7B,CAAAA,WAAX,EAAyBQ,CAAAA,OAAzB,CAAiC,SAAjC;AAA4C,EAA5C,CAAL,CAAwDqC,CAAxD,CAA4D,GADjE,EAEIF,CAAEI,CAAAA,IAAF,CAAOjD,CAAE6B,CAAAA,IAAT,CAAA,EACIe,CAAD,CAAK5C,CAAE6B,CAAAA,IAAKC,CAAAA,KAAP,CAAa,GAAb,CAAA,CAAkB,CAAlB,CAAqB5B,CAAAA,WAArB,EAAL,CAA2C6C,CAA3C,CAA+C,GADlD,EAEE/B,CAAEiC,CAAAA,IAAF,CAAOjD,CAAE6B,CAAAA,IAAT,CAFF,GAEsBe,CAAD,CAAK5C,CAAE6B,CAAAA,IAAP,CAAee,CAAf,CAAmBA,CAAE1C,CAAAA,WAAF,EAAnB,CAAsC6C,CAAtC,CAA0C,GAF/D,CAHF,CAMF,MAAOG,CAAP,CAAU,EAKd,CAAI5C,CAAQ6C,CAAAA,eAAR,CAA0B,CAAC,CAA3B,GAAiCP,CAAEQ,CAAAA,OAAF,CAAUtC,CAAV,CAAjC,CAAgD8B,CAAhD,GAAsD9B,CAA1D,EACM,GAAJ,GAAYiC,CAAZ,EACEnC,CAEA,CAFIZ,CAAE6B,CAAAA,IAAKzB,CAAAA,KAAP,CAAa,+CAAb,CAEJ,CADA4C,CACA,CADI,CAAEK,QAASrD,CAAEsD,CAAAA,EAAb,CAAiBC,SAAU3C,CAAA,CAAE,CAAF,CAA3B,CAAiC4C,YAAa5C,CAAA,CAAE,CAAF,CAAKkB,CAAAA,KAAL,CAAW,GAAX,CAAA,CAAgB,CAAhB,CAA9C,CAAkE2B,UAAWzD,CAAE0D,CAAAA,IAAKhD,CAAAA,OAAP,CAAe,eAAf,CAAgC,EAAhC,CAAoCiD,CAAAA,IAApC,EAA7E,CAAyHC,aAAc5D,CAAE6D,CAAAA,SAAzI,CAAoJC,iBAAkBrD,CAAtK,CACJ,CAAAI,CAAA,CAAW,aAAX,CAA0BmC,CAA1B,CAHF,EAUM,GAAJ,GAAYD,CAAZ,EAAiBpB,CAAA,CAAY3B,CAAZ,CAAjB,EACEY,CAGA,CAHIZ,CAAE+D,CAAAA,QAASjC,CAAAA,KAAX,CAAiB,QAAjB,CAAA,CAA2B,CAA3B,CAGJ,CAFAa,CAEA,CAFIhB,CAAA,CAAY3B,CAAZ,CAEJ,CADAgD,CACA,CADI,CAAEgB,UAAWpD,CAAb,CAAgBqD,eAAgBtB,CAAhC;AAAmCc,UAAWzD,CAAE0D,CAAAA,IAAKhD,CAAAA,OAAP,CAAe,eAAf,CAAgC,EAAhC,CAAoCiD,CAAAA,IAApC,EAA9C,CAA0FN,QAASrD,CAAEsD,CAAAA,EAArG,CAAyGC,SAAUvD,CAAE6B,CAAAA,IAAKnB,CAAAA,OAAP,CAAe,SAAf,CAA0B,EAA1B,CAAnH,CAAkJ8C,YAAaxD,CAAE+B,CAAAA,QAASrB,CAAAA,OAAX,CAAmB,SAAnB,CAA8B,EAA9B,CAA/J,CAAkMoD,iBAAkBrD,CAApN,CACJ,CAAAI,CAAA,CAAW,eAAX,CAA4BmC,CAA5B,CAJF,EAMS,GANT,GAMiBD,CANjB,EAMuBpB,CAAA,CAAY3B,CAAZ,CAjB3B,CA0BM,GAAJ,GAAY+C,CAAZ,EAAiBpB,CAAA,CAAY3B,CAAZ,CAAjB,EACEY,CAGA,CAHIZ,CAAE+D,CAAAA,QAASjC,CAAAA,KAAX,CAAiB,QAAjB,CAAA,CAA2B,CAA3B,CAGJ,CAFAa,CAEA,CAFIhB,CAAA,CAAY3B,CAAZ,CAEJ,CADAgD,CACA,CADI,CAAEgB,UAAWpD,CAAb,CAAgBqD,eAAgBtB,CAAhC,CAAmCc,UAAWzD,CAAE0D,CAAAA,IAAKhD,CAAAA,OAAP,CAAe,eAAf,CAAgC,EAAhC,CAAoCiD,CAAAA,IAApC,EAA9C,CAA0FN,QAASrD,CAAEsD,CAAAA,EAArG,CAAyGC,SAAUvD,CAAE6B,CAAAA,IAAKnB,CAAAA,OAAP,CAAe,SAAf,CAA0B,EAA1B,CAAnH,CAAkJ8C,YAAaxD,CAAE+B,CAAAA,QAASrB,CAAAA,OAAX,CAAmB,SAAnB,CAA8B,EAA9B,CAA/J,CAAkMwD,SAAU,CAAA,CAA5M,CAAkNJ,iBAAkBrD,CAApO,CACJ,CAAAI,CAAA,CAAW,eAAX,CAA4BmC,CAA5B,CAJF,EAMS,GAAJ,GAAYD,CAAZ;AAAkBpB,CAAA,CAAY3B,CAAZ,CAAlB,CAII,GAAJ,GAAY+C,CAAZ,EACHnC,CAEA,CAFIZ,CAAE6B,CAAAA,IAAKzB,CAAAA,KAAP,CAAa,+CAAb,CAEJ,CADA4C,CACA,CADI,CAAEK,QAASrD,CAAEsD,CAAAA,EAAb,CAAiBC,SAAU3C,CAAA,CAAE,CAAF,CAA3B,CAAiC4C,YAAa5C,CAAA,CAAE,CAAF,CAAKkB,CAAAA,KAAL,CAAW,GAAX,CAAA,CAAgB,CAAhB,CAA9C,CAAkE2B,UAAWzD,CAAE0D,CAAAA,IAAKhD,CAAAA,OAAP,CAAe,eAAf,CAAgC,EAAhC,CAAoCiD,CAAAA,IAApC,EAA7E,CAAyHC,aAAc5D,CAAE6D,CAAAA,SAAzI,CAAoJK,SAAU,CAAA,CAA9J,CAAoKJ,iBAAkBrD,CAAtL,CACJ,CAAAI,CAAA,CAAW,aAAX,CAA0BmC,CAA1B,CAHG,EAKI,GALJ,GAKYD,CALZ,GAMHC,CACA,CADI,CAAEK,QAASrD,CAAEsD,CAAAA,EAAb,CAAiBC,SAAUvD,CAAE6B,CAAAA,IAAKC,CAAAA,KAAP,CAAa,MAAb,CAAA,CAAqB,CAArB,CAA3B,CAAoD2B,UAAWzD,CAAE0D,CAAAA,IAAKhD,CAAAA,OAAP,CAAe,eAAf,CAAgC,EAAhC,CAAoCiD,CAAAA,IAApC,EAA/D,CAA2GC,aAAc5D,CAAE6D,CAAAA,SAA3H,CAAsIC,iBAAkBrD,CAAxJ,CACJ,CAAAI,CAAA,CAAW,iBAAX,CAA8BmC,CAA9B,CAPG,CAJA,EACHA,CACA,CADI,CAAEK,QAASrD,CAAEsD,CAAAA,EAAb,CAAiBC,SAAUvD,CAAE6B,CAAAA,IAAKnB,CAAAA,OAAP,CAAe,SAAf,CAA0B,EAA1B,CAA3B;AAA0D8C,YAAaxD,CAAE+B,CAAAA,QAASrB,CAAAA,OAAX,CAAmB,SAAnB,CAA8B,EAA9B,CAAvE,CAA0G+C,UAAWzD,CAAE0D,CAAAA,IAAKhD,CAAAA,OAAP,CAAe,eAAf,CAAgC,EAAhC,CAAoCiD,CAAAA,IAApC,EAArH,CAAiKC,aAAc5D,CAAE6D,CAAAA,SAAjL,CAA4LK,SAAU,CAAA,CAAtM,CAA4MJ,iBAAkBrD,CAA9N,CACJ,CAAAI,CAAA,CAAW,OAAX,CAAoBmC,CAApB,CAFG,CA/DgE,CAFzE,CAkFF,MAAOmB,CAAP,CAAc,EAnFmB,CAwFpCC,SAASC,CAAAA,gBAAT,CAA4BD,QAASC,CAAAA,gBAAT,CAA0B,WAA1B,CAAuClC,CAAvC,CAAsD,CAAA,CAAtD,CAA5B,CAA4FiC,QAASE,CAAAA,WAArG,EAAoHF,QAASE,CAAAA,WAAT,CAAqB,aAArB,CAAoCnC,CAApC,CACpHiC,SAASC,CAAAA,gBAAT,CAA4BD,QAASC,CAAAA,gBAAT,CAA0B,SAA1B,CAAqClC,CAArC,CAAoD,CAAA,CAApD,CAA5B,CAA0FiC,QAASE,CAAAA,WAAnG,EAAkHF,QAASE,CAAAA,WAAT,CAAqB,WAArB,CAAkCnC,CAAlC,CA5HzF,CAuR5BoC,QAASA,EAAqB,EAAG,CAS/BC,QAASA,EAAY,CAAC3B,CAAD,CAAI,CACvB,IAAI4B,EAAqC,OAAvB,GAAC5B,CAAEN,CAAAA,MAAOC,CAAAA,QAAV,CAAkC,OAAlC;AAA4C,OAA9D,CACIkC,EAAO,EACM,QAAhB,GAACD,CAAD,CAA4BC,CAA5B,CAAmC,CAClCC,eAAgB,aADkB,CAElCC,YAAaC,kBAAA,CAAmBhC,CAAEN,CAAAA,MAAOuC,CAAAA,UAAWhD,CAAAA,KAApB,CAA0B,GAA1B,CAAA,CAA+Be,CAAEN,CAAAA,MAAOuC,CAAAA,UAAWhD,CAAAA,KAApB,CAA0B,GAA1B,CAA+BzB,CAAAA,MAA9D,CAAuE,CAAvE,CAAnB,CAFqB,CAGlC0E,SAAUlC,CAAEN,CAAAA,MAAOe,CAAAA,EAHe,CAIlC0B,UAAWH,kBAAA,CAAmBhC,CAAEN,CAAAA,MAAOuC,CAAAA,UAA5B,CAJuB,CAAnC,CAKKJ,CALL,CAKY,CACXO,eAAgB,aADL,CAEXC,YAAaL,kBAAA,CAAmBhC,CAAEN,CAAAA,MAAOuC,CAAAA,UAAWhD,CAAAA,KAApB,CAA0B,GAA1B,CAAA,CAA+Be,CAAEN,CAAAA,MAAOuC,CAAAA,UAAWhD,CAAAA,KAApB,CAA0B,GAA1B,CAA+BzB,CAAAA,MAA9D,CAAuE,CAAvE,CAAnB,CAFF,CAGX8E,SAAUtC,CAAEN,CAAAA,MAAOe,CAAAA,EAHR,CAIX8B,UAAWP,kBAAA,CAAmBhC,CAAEN,CAAAA,MAAOuC,CAAAA,UAA5B,CAJA,CAMb,QAAQjC,CAAER,CAAAA,IAAV,EACE,KAAK,YAAL,CACEgD,CAAA,CAAaxC,CAAEN,CAAAA,MAAOe,CAAAA,EAAtB,CAA0BgC,CAAAA,OAA1B,CAAoCC,IAAKC,CAAAA,KAAL,CAAW3C,CAAEN,CAAAA,MAAOkD,CAAAA,WAApB,CACpC;IAAIC,EAAaH,IAAKI,CAAAA,KAAL,CAAW,GAAX,CAAiBN,CAAA,CAAaxC,CAAEN,CAAAA,MAAOe,CAAAA,EAAtB,CAA0BgC,CAAAA,OAA3C,CAAqDC,IAAKC,CAAAA,KAAL,CAAW3C,CAAEN,CAAAA,MAAOqD,CAAAA,QAApB,CAArD,CAAjB,CACSC,CAAT,KAASA,CAAT,GAAcR,EAAA,CAAaxC,CAAEN,CAAAA,MAAOe,CAAAA,EAAtB,CAA0BwC,CAAAA,oBAAxC,CACMJ,CAAJ,EAAkBG,CAAlB,EAAuBA,CAAvB,CAA2BR,CAAA,CAAaxC,CAAEN,CAAAA,MAAOe,CAAAA,EAAtB,CAA0ByC,CAAAA,gBAArD,GACEV,CAAA,CAAaxC,CAAEN,CAAAA,MAAOe,CAAAA,EAAtB,CAA0ByC,CAAAA,gBAD5B,CAC+CF,CAD/C,CAIER,EAAA,CAAaxC,CAAEN,CAAAA,MAAOe,CAAAA,EAAtB,CAA0ByC,CAAAA,gBAA9B,EAAkD,CAACV,CAAA,CAAaxC,CAAEN,CAAAA,MAAOe,CAAAA,EAAtB,CAA0BwC,CAAAA,oBAA1B,CAA+CT,CAAA,CAAaxC,CAAEN,CAAAA,MAAOe,CAAAA,EAAtB,CAA0ByC,CAAAA,gBAAzE,CAAnD,GACEV,CAAA,CAAaxC,CAAEN,CAAAA,MAAOe,CAAAA,EAAtB,CAA0BwC,CAAAA,oBAA1B,CAA+CT,CAAA,CAAaxC,CAAEN,CAAAA,MAAOe,CAAAA,EAAtB,CAA0ByC,CAAAA,gBAAzE,CAGA,CAH6F,CAAA,CAG7F,CAFiB,OAAhB,GAACtB,CAAD,EAA4BC,CAAKsB,CAAAA,kBAAL,CAA0BX,CAAA,CAAaxC,CAAEN,CAAAA,MAAOe,CAAAA,EAAtB,CAA0BgC,CAAAA,OAApD,CAA6DZ,CAAKuB,CAAAA,cAAlE,CAAmFV,IAAKC,CAAAA,KAAL,CAAW3C,CAAEN,CAAAA,MAAOqD,CAAAA,QAApB,CAAnF,CAAkHlB,CAAKwB,CAAAA,aAAvH,CAAuIb,CAAA,CAAaxC,CAAEN,CAAAA,MAAOe,CAAAA,EAAtB,CAA0ByC,CAAAA,gBAA7L;CACErB,CAAKyB,CAAAA,kBAAL,CAA0Bd,CAAA,CAAaxC,CAAEN,CAAAA,MAAOe,CAAAA,EAAtB,CAA0BgC,CAAAA,OAApD,CAA6DZ,CAAK0B,CAAAA,cAAlE,CAAmFb,IAAKC,CAAAA,KAAL,CAAW3C,CAAEN,CAAAA,MAAOqD,CAAAA,QAApB,CAAnF,CAAkHlB,CAAK2B,CAAAA,aAAvH,CAAuIhB,CAAA,CAAaxC,CAAEN,CAAAA,MAAOe,CAAAA,EAAtB,CAA0ByC,CAAAA,gBADnK,CAED,CAAAlF,CAAA,CAAW4D,CAAX,CAAwB,WAAxB,CAAqCC,CAArC,CAJF,CAMA,MACF,MAAK,MAAL,CACmB,OAAhB,GAACD,CAAD,EAA4BC,CAAKsB,CAAAA,kBAAL,CAA0BX,CAAA,CAAaxC,CAAEN,CAAAA,MAAOe,CAAAA,EAAtB,CAA0BgC,CAAAA,OAApD,CAA6DZ,CAAKuB,CAAAA,cAAlE,CAAmFV,IAAKC,CAAAA,KAAL,CAAW3C,CAAEN,CAAAA,MAAOqD,CAAAA,QAApB,CAAnF,CAAkHlB,CAAKwB,CAAAA,aAAvH,CAAuIb,CAAA,CAAaxC,CAAEN,CAAAA,MAAOe,CAAAA,EAAtB,CAA0ByC,CAAAA,gBAA7L,GACErB,CAAKyB,CAAAA,kBAAL,CAA0Bd,CAAA,CAAaxC,CAAEN,CAAAA,MAAOe,CAAAA,EAAtB,CAA0BgC,CAAAA,OAApD,CAA6DZ,CAAK0B,CAAAA,cAAlE,CAAmFb,IAAKC,CAAAA,KAAL,CAAW3C,CAAEN,CAAAA,MAAOqD,CAAAA,QAApB,CAAnF,CAAkHlB,CAAK2B,CAAAA,aAAvH,CAAuIhB,CAAA,CAAaxC,CAAEN,CAAAA,MAAOe,CAAAA,EAAtB,CAA0ByC,CAAAA,gBADnK,CAEDlF,EAAA,CAD0O,CAAvCyF,GAACjB,CAAA,CAAaxC,CAAEN,CAAAA,MAAOe,CAAAA,EAAtB,CAA0BgC,CAAAA,OAA3BgB;AAA4C7B,CAA5C6B,CAAyD,QAAzDA,CAAoE7B,CAApE6B,CAAiF,OACpR,CAAgB5B,CAAhB,CACA,MACF,MAAK,OAAL,CACMW,CAAA,CAAaxC,CAAEN,CAAAA,MAAOe,CAAAA,EAAtB,CAA0BgC,CAAAA,OAA9B,GAA0CC,IAAKC,CAAAA,KAAL,CAAW3C,CAAEN,CAAAA,MAAOqD,CAAAA,QAApB,CAA1C,GACmB,OAAhB,GAACnB,CAAD,EAA4BC,CAAKsB,CAAAA,kBAAL,CAA0BX,CAAA,CAAaxC,CAAEN,CAAAA,MAAOe,CAAAA,EAAtB,CAA0BgC,CAAAA,OAApD,CAA6DZ,CAAKuB,CAAAA,cAAlE,CAAmFV,IAAKC,CAAAA,KAAL,CAAW3C,CAAEN,CAAAA,MAAOqD,CAAAA,QAApB,CAAnF,CAAkHlB,CAAKwB,CAAAA,aAAvH,CAAuIb,CAAA,CAAaxC,CAAEN,CAAAA,MAAOe,CAAAA,EAAtB,CAA0ByC,CAAAA,gBAA7L,GACErB,CAAKyB,CAAAA,kBAAL,CAA0Bd,CAAA,CAAaxC,CAAEN,CAAAA,MAAOe,CAAAA,EAAtB,CAA0BgC,CAAAA,OAApD,CAA6DZ,CAAK0B,CAAAA,cAAlE,CAAmFb,IAAKC,CAAAA,KAAL,CAAW3C,CAAEN,CAAAA,MAAOqD,CAAAA,QAApB,CAAnF,CAAkHlB,CAAK2B,CAAAA,aAAvH,CAAuIhB,CAAA,CAAaxC,CAAEN,CAAAA,MAAOe,CAAAA,EAAtB,CAA0ByC,CAAAA,gBADnK,CAED,CAAAlF,CAAA,CAAW4D,CAAX,CAAwB,QAAxB,CAAkCC,CAAlC,CAHF,CAKA,MACF,MAAK,OAAL,CAME,IALiB,OAAhB,GAACD,CAAD,EAA4BC,CAAKsB,CAAAA,kBAAL,CAA0BX,CAAA,CAAaxC,CAAEN,CAAAA,MAAOe,CAAAA,EAAtB,CAA0BgC,CAAAA,OAApD,CAA6DZ,CAAKuB,CAAAA,cAAlE;AAAmFV,IAAKC,CAAAA,KAAL,CAAW3C,CAAEN,CAAAA,MAAOqD,CAAAA,QAApB,CAAnF,CAAkHlB,CAAKwB,CAAAA,aAAvH,CAAuI,KAAnK,GACExB,CAAKyB,CAAAA,kBAAL,CAA0Bd,CAAA,CAAaxC,CAAEN,CAAAA,MAAOe,CAAAA,EAAtB,CAA0BgC,CAAAA,OAApD,CAA6DZ,CAAK0B,CAAAA,cAAlE,CAAmFb,IAAKC,CAAAA,KAAL,CAAW3C,CAAEN,CAAAA,MAAOqD,CAAAA,QAApB,CAAnF,CAAkHlB,CAAK2B,CAAAA,aAAvH,CAAuI,KADzI,CAKQvF,CAHTD,CAAA,CAAW4D,CAAX,CAAwB,WAAxB,CAAqCC,CAArC,CAGS5D,CAFTuE,CAAA,CAAaxC,CAAEN,CAAAA,MAAOe,CAAAA,EAAtB,CAA0BgC,CAAAA,OAEjBxE,CAF2B,CAE3BA,CADTuE,CAAA,CAAaxC,CAAEN,CAAAA,MAAOe,CAAAA,EAAtB,CAA0ByC,CAAAA,gBACjBjF,CADoC,CACpCA,CAAAA,CAAAA,CAAI,CAAb,CAAgBA,CAAhB,EAAsB,GAAtB,CAA4ByF,CAA5B,CAAyCzF,CAAA,EAAzC,CACyB,CAAtB,GAAC,GAAD,CAAOyF,CAAP,EAA2BzF,CAA3B,GAAiC,GAAjC,CAAuCyF,CAAvC,CAAqDlB,CAAA,CAAaxC,CAAEN,CAAAA,MAAOe,CAAAA,EAAtB,CAA0BkD,CAAAA,cAA/E,CAAgG,EAAhG,CAA0H,GAApB,GAACD,CAAD,CAAczF,CAAd,CAA2BuE,CAAA,CAAaxC,CAAEN,CAAAA,MAAOe,CAAAA,EAAtB,CAA0BkD,CAAAA,cAArD,CAAsED,CAAtE,CAAmFzF,CAAnF,CAAuF,EAC9L,CAAAuE,CAAA,CAAaxC,CAAEN,CAAAA,MAAOe,CAAAA,EAAtB,CAA0BwC,CAAAA,oBAA1B,CAA+CT,CAAA,CAAaxC,CAAEN,CAAAA,MAAOe,CAAAA,EAAtB,CAA0BkD,CAAAA,cAAzE,CAAA,CAA2F,CAAA,CApCjG,CAduB,CA2DzB,IAnEA,IAAID,EAAajG,CAAQmG,CAAAA,YAAzB,CACIpB,EAAe,EADnB,CAiEIqB,EAAYtC,QAASuC,CAAAA,gBAAT,CAA0B,aAA1B,CAjEhB;AAmES5D,EAAI,CAAb,CAAgBA,CAAhB,CAAoB2D,CAAUrG,CAAAA,MAA9B,CAAsC0C,CAAA,EAAtC,CAA2C,CACzC,IAAI6D,CACDF,EAAA,CAAU3D,CAAV,CAAa8D,CAAAA,YAAb,CAA0B,IAA1B,CAAF,CAAwJD,CAAxJ,CAAqKF,CAAA,CAAU3D,CAAV,CAAa8D,CAAAA,YAAb,CAA0B,IAA1B,CAArK,EAAsCD,CAAA,CAAa,cAAb,CAA8BrB,IAAKuB,CAAAA,MAAL,EAAc7G,CAAAA,QAAd,CAAuB,EAAvB,CAA2B8G,CAAAA,KAA3B,CAAiC,CAAjC,CAA9B,CAAmEL,CAAA,CAAU3D,CAAV,CAAaiE,CAAAA,YAAb,CAA0B,IAA1B,CAAgCJ,CAAhC,CAAzG,CACDvB,EAAA,CAAauB,CAAb,CAAA,CAA2B,EAC3BvB,EAAA,CAAauB,CAAb,CAAyBb,CAAAA,gBAAzB,CAA4C,CAC5CV,EAAA,CAAauB,CAAb,CAAyBd,CAAAA,oBAAzB,CAAgD,EAEhD,KAAK,IAAIhF,EAAI,CAAb,CAAgBA,CAAhB,EAAsB,GAAtB,CAA4ByF,CAA5B,CAAyCzF,CAAA,EAAzC,CACyB,CAAtB,GAAC,GAAD,CAAOyF,CAAP,EAA2BzF,CAA3B,GAAiC,GAAjC,CAAuCyF,CAAvC,CAAqDlB,CAAA,CAAauB,CAAb,CAAyBJ,CAAAA,cAA9E,CAA+F,EAA/F,CAAyH,GAApB,GAACD,CAAD,CAAczF,CAAd,CAA2BuE,CAAA,CAAauB,CAAb,CAAyBJ,CAAAA,cAApD,CAAqED,CAArE,CAAkFzF,CAAlF,CAAsF,EAC5L,CAAAuE,CAAA,CAAauB,CAAb,CAAyBd,CAAAA,oBAAzB,CAA8CT,CAAA,CAAauB,CAAb,CAAyBJ,CAAAA,cAAvE,CAAA,CAAyF,CAAA,CAG3FnB,EAAA,CAAauB,CAAb,CAAyBtB,CAAAA,OAAzB,CAAmC,CACnCoB,EAAA,CAAU3D,CAAV,CAAasB,CAAAA,gBAAb,CAA8B,MAA9B,CAAsCG,CAAtC,CAAoD,CAAA,CAApD,CACAkC,EAAA,CAAU3D,CAAV,CAAasB,CAAAA,gBAAb,CAA8B,OAA9B,CAAuCG,CAAvC,CAAqD,CAAA,CAArD,CACAkC,EAAA,CAAU3D,CAAV,CAAasB,CAAAA,gBAAb,CAA8B,OAA9B,CAAuCG,CAAvC,CAAqD,CAAA,CAArD,CACAkC,EAAA,CAAU3D,CAAV,CAAasB,CAAAA,gBAAb,CAA8B,YAA9B;AAA4CG,CAA5C,CAA0D,CAAA,CAA1D,CACAkC,EAAA,CAAU3D,CAAV,CAAasB,CAAAA,gBAAb,CAA8B,OAA9B,CAAuCG,CAAvC,CAAqD,CAAA,CAArD,CAjByC,CApEZ,CAkJjClD,QAASA,EAAc,CAAC2F,CAAD,CAAO,CAC5B,GAAI,CACF,GAAIC,MAAA,CAAOD,CAAP,CAAJ,GAAqBA,CAArB,EAA6BE,KAAMC,CAAAA,OAAN,CAAcH,CAAd,CAA7B,CACE,MAAOA,EAFP,KAGEI,EAAS,EAHX,CAIOC,CAAT,KAASA,CAAT,GAAcL,EAAd,CAAoB,CAClB,IAAAM,EAAMF,CAAQ,KAAAG,EAAO,EAAI,KAAAC,EAAO,CAChC,GAAG,CACD,IAAAC,EAAMJ,CAAElE,CAAAA,OAAF,CAAU,GAAV,CAAeqE,CAAf,CACN,KAAAE,EAAOL,CAAEM,CAAAA,SAAF,CAAYH,CAAZ,CAA0B,CAAC,CAAT,GAAAC,CAAA,CAAaA,CAAb,CAAmBG,IAAAA,EAArC,CACPN,EAAA,CAAMA,CAAA,CAAIC,CAAJ,CAAN,GAAoBD,CAAA,CAAIC,CAAJ,CAApB,CAAkCM,KAAA,CAAMC,QAAA,CAASJ,CAAT,CAAN,CAAD,CAA8B,EAA9B,CAAyB,EAA1D,CACAH,EAAA,CAAOG,CACPF,EAAA,CAAOC,CAAP,CAAa,CALZ,CAAH,MAMgB,CANhB,EAMSA,CANT,CAOAH,EAAA,CAAIC,CAAJ,CAAA,CAAYP,CAAA,CAAKK,CAAL,CATM,CAWpB,MAAOD,EAAA,CAAO,EAAP,CAfL,CAiBF,MAAOlD,CAAP,CAAc,EAlBY,CA2B9B6D,QAASA,EAAY,CAACf,CAAD,CAAO,CAC1B,GAAI,CACF,IAAII,EAAS,EAQbY,SAASA,EAAO,CAACV,CAAD,CAAMC,CAAN,CAAY,CAC1B,GAAIN,MAAA,CAAOK,CAAP,CAAJ,GAAoBA,CAApB,CACEF,CAAA,CAAOG,CAAP,CAAA,CAAeD,CADjB,KAEO,IAAIJ,KAAMC,CAAAA,OAAN,CAAcG,CAAd,CAAJ,CAAwB,CAC7B,IAD6B,IACpBxE,EAAI,CADgB,CACbC,EAAIuE,CAAIlH,CAAAA,MAAxB,CAAgC0C,CAAhC,CAAoCC,CAApC,CAAuCD,CAAA,EAAvC,CACEkF,CAAA,CAAQV,CAAA,CAAIxE,CAAJ,CAAR,CAAgByE,CAAA,CAAOA,CAAP,CAAc,GAAd,CAAoBzE,CAApB,CAAwB,EAAxB,CAA6BA,CAA7C,CACO,EAAT,EAAIC,CAAJ,GACEqE,CAAA,CAAOG,CAAP,CADF,CACiB,EADjB,CAH6B,CAAxB,IAKA,CACDU,CAAAA,CAAU,CAAA,CACd,KAASZ,CAAT,GAAcC,EAAd,CACEW,CACA,CADU,CAAA,CACV;AAAAD,CAAA,CAAQV,CAAA,CAAID,CAAJ,CAAR,CAAgBE,CAAA,CAAOA,CAAP,CAAc,GAAd,CAAoBF,CAApB,CAAwBA,CAAxC,CAEEY,EAAJ,GACEb,CAAA,CAAOG,CAAP,CADF,CACiB,EADjB,CANK,CARmB,CAkB5BS,CAAA,CAAQhB,CAAR,CAAc,EAAd,CACA,OAAOI,EA5BL,CA6BF,MAAOlD,CAAP,CAAc,EA9BU,CAsC5B/C,QAASA,EAAW,CAAC+G,CAAD,CAAM,CACxB,MAAOjB,OAAOkB,CAAAA,IAAP,CAAYD,CAAZ,CAAiBE,CAAAA,MAAjB,CAAwB,QAAS,CAACC,CAAD,CAAMC,CAAN,CAAWxF,CAAX,CAAc,CAEpDyF,CAAA,CAAmB,CAAP,GAACzF,CAAD,CAAY,EAAZ,CAAiB,GAC7BwF,EAAA,CAAME,kBAAA,CAAmBF,CAAnB,CACN,KAAAG,EAAMD,kBAAA,CAAmBN,CAAA,CAAII,CAAJ,CAAnB,CACN,OAAO,CAACD,CAAD,CAAME,CAAN,CAAiBD,CAAjB,CAAsB,GAAtB,CAA2BG,CAA3B,CAAgCC,CAAAA,IAAhC,CAAqC,EAArC,CAL6C,CAA/C,CAMJ,EANI,CADiB,CAc1BtH,QAASA,EAAY,CAACuH,CAAD,CAAK,CAExB,IAAIvB,EAAS,EADDuB,EAAG9G,CAAAA,KAAH+G,CAAS,GAATA,CAENC,CAAAA,OAAN,CAAc,QAAS,CAACxB,CAAD,CAAI,CACzB,IAAIyB,EAAOzB,CAAExF,CAAAA,KAAF,CAAQ,GAAR,CACPyG,EAAAA,CAAMQ,CAAA,CAAK,CAAL,CACNC,EAAAA,CAAQnE,kBAAA,CAAmBkE,CAAA,CAAK,CAAL,CAAnB,EAA8B,EAA9B,CACT,EAACjB,KAAA,CAAMmB,MAAA,CAAOD,CAAP,CAAN,CAAJ,EAA4B,0FAA2F/F,CAAAA,IAA3F,CAAgGsF,CAAhG,CAA5B,GACES,CADF,CACUC,MAAA,CAAOD,CAAP,CADV,CAKI3B,EAAA,CAAOkB,CAAP,CAAJ,CACsD,gBAApD,GAAIrB,MAAOgC,CAAAA,SAAUjJ,CAAAA,QAASkJ,CAAAA,IAA1B,CAA+B9B,CAAA,CAAOkB,CAAP,CAA/B,CAAJ;AACElB,CAAA,CAAOkB,CAAP,CAAY1I,CAAAA,IAAZ,CAAiBmJ,CAAjB,CADF,CAGE3B,CAAA,CAAOkB,CAAP,CAHF,CAGgB,CAAClB,CAAA,CAAOkB,CAAP,CAAD,CAAcS,CAAd,CAJlB,CAOE3B,CAAA,CAAOkB,CAAP,CAPF,CAOgBS,CAhBS,CAA3B,CAoBA,OAAOI,KAAKC,CAAAA,KAAL,CAAWD,IAAKE,CAAAA,SAAL,CAAejC,CAAf,CAAX,CAvBiB,CA8B1BkC,QAASA,EAAc,EAAG,CACxB,MAAO,CAAC,CACNC,KAAM,OADA,CAENC,MAAO,iDAFD,CAAD,CAGJ,CACDD,KAAM,KADL,CAEDC,MAAO,mHAFN,CAHI,CAMJ,CACDD,KAAM,KADL,CAEDC,MAAO,2FAFN,CANI,CASJ,CACDD,KAAM,MADL,CAEDC,MAAO,iEAFN,CATI,CAYJ,CACDD,KAAM,UADL;AAEDC,MAAO,2DAFN,CAZI,CAeJ,CACDD,KAAM,KADL,CAEDC,MAAO,uDAFN,CAfI,CAkBJ,CACDD,KAAM,SADL,CAEDC,MAAO,oCAFN,CAlBI,CADiB,CAgC1BtI,QAASA,EAAY,CAACuI,CAAD,CAAUrH,CAAV,CAAgB,CACnC,GAAI,CAGF,IAAIsH,EAAWJ,CAAA,EACfG,EAAA,CAAY,QAAD,GAAc,MAAOA,EAArB,EAAgC,cAAezG,CAAAA,IAAf,CAAoBZ,CAApB,CAAhC,EAA8D2F,CAAA,CAAa0B,CAAb,CAAA,CAAuBA,CAAvB,CAAiCtI,CAAA,CAAYsI,CAAZ,CAA/F,EAAuHA,CAClIH,EAAA,EAEA,KAAIK,EAAaC,CAAqB5J,CAAAA,QAArB,EAAgCC,CAAAA,WAAhC,EAA8CQ,CAAAA,OAA9C,CAAsD,IAAtD,CAA6D,IAA7D,CAAbkJ,CAAkF,GAAtF,CACIE,EAAmBJ,CAAQ5H,CAAAA,KAAR,CAAc,GAAd,CACvB,KAASiB,CAAT,CAAa,CAAb,CAAgBA,CAAhB,CAAoB+G,CAAiBzJ,CAAAA,MAArC,CAA6C0C,CAAA,EAA7C,CAAkD,CAChD,IAAIgH,EAAiB,EAArB,CACIC,EAASF,CAAA,CAAiB/G,CAAjB,CAAoBjB,CAAAA,KAApB,CAA0B,GAA1B,CADb,CAEImI,EAAyB,CAAjB,CAACD,CAAO3J,CAAAA,MAAR,CAAsB2J,CAAOjD,CAAAA,KAAP,CAAa,CAAb,CAAgB4B,CAAAA,IAAhB,CAAqB,GAArB,CAAtB,CAAkDqB,CAAA,CAAO,CAAP,CAAWA,EAAOE,CAAAA,MAAP,CAAc,CAAd,CAAkBF,EAAA,CAAO,CAAP,CAAA,CAAYC,CAEvG,IAAI,CACF,IAAAE,EAAOtF,kBAAA,CAAmBA,kBAAA,CAAmBmF,CAAA,CAAO,CAAP,CAAnB,CAAnB,CADL,CAEF,MAAOnH,CAAP,CAAU,CACVsH,CAAA;AAAOtF,kBAAA,CAAmBmF,CAAA,CAAO,CAAP,CAAnB,CADG,CAGZ,IAAII,EAAW,2EACf,IAAI,CACF,GAAGA,CAASnH,CAAAA,IAAT,CAAckH,CAAd,CAAH,CACE,GAAG,sBAAuBlH,CAAAA,IAAvB,CAA4B+G,CAAA,CAAO,CAAP,CAA5B,CAAH,CACEG,CAAA,CAAOA,CAAKzJ,CAAAA,OAAL,CAAa,QAAb,CAAuB,EAAvB,CADT,KAGI,CACF,IAAI2J,EAAKF,CAAKzJ,CAAAA,OAAL,CAAa,cAAb,CAA6B,EAA7B,CAAiCoB,CAAAA,KAAjC,CAAuC,GAAvC,CAAA,CAA4C,CAA5C,CACN,cAAcmB,CAAAA,IAAd,CAAmBoH,CAAnB,CAAH,GACEF,CADF,CACSA,CAAKzJ,CAAAA,OAAL,CAAa,QAAb,CAAuB,EAAvB,CADT,CAFE,CALJ,CAaF,MAAOyD,CAAP,CAAc,EAIhB,IAAiD,IAAjD,EAAK6F,CAAA,CAAO,CAAP,CAAU5J,CAAAA,KAAV,CAAoB6B,MAAJ,CApCLqI,4BAoCK,CAAhB,CAAL,EAAyD,cAAerH,CAAAA,IAAf,CAAoBZ,CAApB,CAAzD,GAA2G,CAAC,CAA5G,CAAuF8H,CAAK/G,CAAAA,OAAL,CAAa,GAAb,CAAvF,CAA+G,CAC7G,IAAImH,EAAaJ,CAAKrI,CAAAA,KAAL,CAAW,GAAX,CAAgBoI,CAAAA,MAAhB,CAAuB,CAAvB,CAA0BvB,CAAAA,IAA1B,CAA+B,GAA/B,CAAoC7G,CAAAA,KAApC,CAA0C,GAA1C,CACb0I,EAAAA,CAAgB,EAEpB,KAAKC,EAAL,CAAU,CAAV,CAAaA,EAAb,CAAkBF,CAAWlK,CAAAA,MAA7B,CAAqCoK,EAAA,EAArC,CAEoC,CAAC,CAAnC,CAAIF,CAAA,CAAWE,EAAX,CAAerH,CAAAA,OAAf,CAAuB,GAAvB,CAAJ;AACEoH,CAAc3K,CAAAA,IAAd,CAAmB0K,CAAA,CAAWE,EAAX,CAAe3I,CAAAA,KAAf,CAAqB,GAArB,CAAA,CAA0B,CAA1B,CAAnB,CAGJyI,EAAA,CAAaA,CAAWG,CAAAA,MAAX,CAAkBF,CAAlB,CAEb,KAASG,CAAT,CAAc,CAAd,CAAiBA,CAAjB,CAAsBJ,CAAWlK,CAAAA,MAAjC,CAAyCsK,CAAA,EAAzC,CACoE,IAAlE,EAAIJ,CAAA,CAAWI,CAAX,CAAezK,CAAAA,WAAf,EAA6BE,CAAAA,KAA7B,CAAmC,IAAI6B,MAAJ,CAAW2H,CAAX,CAAnC,CAAJ,GACEG,CADF,EACoBQ,CAAA,CAAWI,CAAX,CADpB,CACqC,GADrC,CAIFR,EAAA,CAAOA,CAAKzJ,CAAAA,OAAL,CAAa,MAAb,CAAqB,GAArB,CAA2BqJ,CAAerJ,CAAAA,OAAf,CAAuB,IAAvB,CAA8B,EAA9B,CAA3B,CAjBsG,CAqBlG,MAAb,GAAI2B,CAAJ,CACEsH,CAAS9J,CAAAA,IAAT,CACE,CACE2J,KAAM,KADR,CAEEC,MAAO,0HAFT,CAGEmB,OAAQ,YAHV,CADF,CAKK,CACHpB,KAAM,KADH,CAEHC,MAAO,0HAFJ,CAGHmB,OAAQ,YAHL,CALL;AASG,CACDpB,KAAM,KADL,CAEDC,MAAO,0HAFN,CAGDmB,OAAQ,YAHP,CATH,CAaG,CACDpB,KAAM,KADL,CAEDC,MAAO,0HAFN,CAGDmB,OAAQ,YAHP,CAbH,CADF,EAoBkB,OApBlB,GAoBSvI,CApBT,EAoBuC,MApBvC,GAoB8BA,CApB9B,EAoBiD,iFAAkFY,CAAAA,IAAlF,CAAuFkH,CAAvF,CApBjD,GAqBER,CAAS9J,CAAAA,IAAT,CACE,CACE2J,KAAM,KADR,CAEEC,MAAO,qHAFT,CADF;AAIK,CACHD,KAAM,KADH,CAEHC,MAAO,6FAFJ,CAJL,CAOG,CACDD,KAAM,KADL,CAEDC,MAAO,0HAFN,CAGDmB,OAAQ,YAHP,CAPH,CAWG,CACDpB,KAAM,KADL,CAEDC,MAAO,2HAFN,CAGDmB,OAAQ,YAHP,CAXH,CAeG,CACDpB,KAAM,KADL,CAEDC,MAAO,2HAFN;AAGDmB,OAAQ,YAHP,CAfH,CAmBG,CACDpB,KAAM,KADL,CAEDC,MAAO,0HAFN,CAGDmB,OAAQ,YAHP,CAnBH,CA0BF,IAAiD,IAAjD,EAAKZ,CAAA,CAAO,CAAP,CAAU5J,CAAAA,KAAV,CAAoB6B,MAAJ,CAxGLqI,4BAwGK,CAAhB,CAAL,EAAuG,IAAvG,EAAyDN,CAAA,CAAO,CAAP,CAAU5J,CAAAA,KAAV,CAAoB6B,MAAJ,CAvGvD4I,gGAuGuD,CAAhB,CAAzD,EAAgH,sBAAuB5H,CAAAA,IAAvB,CAA4BZ,CAA5B,CAAhH,CACEsH,CAASb,CAAAA,OAAT,CAAiB,QAAS,CAACgC,CAAD,CAAM,CACvB,QAAS7H,CAAAA,IAAT,CAAc+G,CAAA,CAAO,CAAP,CAAd,CAAP,EAAmC,gDAAiD/G,CAAAA,IAAjD,CAAsDkH,CAAtD,CAAnC,EAAoG,QAASlH,CAAAA,IAAT,CAAc+G,CAAA,CAAO,CAAP,CAAd,CAApG;AAAgI,4DAA6D/G,CAAAA,IAA7D,CAAkEkH,CAAlE,CAAhI,GACEA,CADF,CACSA,CAAKzJ,CAAAA,OAAL,CAAaoK,CAAIrB,CAAAA,KAAjB,CAAwB,YAAxB,CAAuCqB,CAAItB,CAAAA,IAA3C,CAAkD,GAAlD,CADT,CAD8B,CAAhC,CAOA,CADAQ,CAAA,CAAO,CAAP,CACA,CADYvB,kBAAA,CAAmB0B,CAAKzJ,CAAAA,OAAL,CAAa,KAAb,CAAoB,EAApB,CAAnB,CACZ,EAD2DyJ,CAAKzJ,CAAAA,OAAL,CAAa,KAAb,CAAoB,EAApB,CAC3D,CAAAoJ,CAAA,CAAiB/G,CAAjB,CAAA,CAAsBiH,CAAOrB,CAAAA,IAAP,CAAY,GAAZ,CAxGwB,CA2GlDY,CAAA,EACA,OAAOO,EAAiBnB,CAAAA,IAAjB,CAAsB,GAAtB,CArHL,CAsHF,MAAOxE,CAAP,CAAc,EAvHmB,CA+HrC4G,QAASA,EAAkB,EAAG,CAC5B,GAAI,CACF,IAAIC,EAAQ5G,QAAS6G,CAAAA,aAAT,CAAuB,iDAAvB,CACRD,EAAJ,EACEA,CAAM3G,CAAAA,gBAAN,CAAuB,OAAvB,CAAgC,QAAS,CAACxB,CAAD,CAAI,CAC3CqI,IAAA,CAAK,gCAAL,CAAuC,CAAEzH,UAAWZ,CAAEN,CAAAA,MAAO4I,CAAAA,WAAYxH,CAAAA,IAArB,EAAb,CAA0CyH,QAAS,QAAnD,CAAvC,CAD2C,CAA7C,CAHA,CAQF,MAAOjH,CAAP,CAAc,EATY,CAoB9BkH,QAASA,EAAW,CAACrL,CAAD,CAAI,CACtB,IAAIc;AAAI,IAAImB,MAAJ,CAAW,SAAX,CAAuB3B,CAAQgL,CAAAA,aAA/B,CAA+C,WAA/C,CAA4D,GAA5D,CACRxK,EAAEmC,CAAAA,IAAF,CAAOjD,CAAP,CAAA,GAAcA,CAAA,CAAIA,CAAEU,CAAAA,OAAF,CAAUI,CAAV,CAAa,WAAb,CAAJ,CAA+BW,CAA/B,CAA0CzB,CAAEI,CAAAA,KAAF,CAAQ,0BAAR,CAAA,CAAqC,CAArC,CAAxD,CACA,OAAOJ,EAHe,CAgBxBuL,QAASA,EAAY,CAACC,CAAD,CAAI,CAKvBvJ,MAAOwJ,CAAAA,MAAP,CAAgBC,QAAS,CAACC,CAAD,CAAI,CAAE,MAAOA,EAAEjL,CAAAA,OAAF,CAAU,wBAAV,CAAoC,MAApC,CAAT,CALN,KAOrBD,EAAI,EACJmL,EAAAA,CAA2F1L,CAAnF+C,CAFF4I,IAAI5J,MAAJ4J,CAAY,6BAA4B5J,MAAOwJ,CAAAA,MAAP,CAAcrH,QAAS0H,CAAAA,QAAS/J,CAAAA,QAASrB,CAAAA,OAA3B,CAAmC,SAAnC,CAA8C,EAA9C,CAAd,CAA5B,EAAZmL,CAA4G,IAA5GA,CAEE5I,EAAAA,IAAF,CAAOuI,CAAP,CAAD,CAAcA,CAAd,CAAkBpH,QAAS0H,CAAAA,QAASC,CAAAA,QAApC,CAA+C,IAA/C,CAAsD3H,QAAS0H,CAAAA,QAAS/J,CAAAA,QAAxE,CAAmFyJ,CAAGtL,EAAAA,WAAvF,EARiB,KASrBF,EAAI4L,CAAE9J,CAAAA,KAAF,CAAQ,GAAR,CAAA,CAAa,CAAb,CAUN,OAT4B,EAAtBkK,CAAAJ,CAAE9J,CAAAA,KAAF,CAAQ,GAAR,CAAazB,CAAAA,MAAb2L,EACCJ,CACA9J,CAAAA,KADA,CACM,GADN,CAAA,CACW,CADX,CAEAA,CAAAA,KAFA,CAEM,GAFN,CAGAgH,CAAAA,OAHA,CAGQ,QAAS,CAAC8C,CAAD;AAAI7I,CAAJ,CAAO,CACkD,CAAC,CAA1E,CAAA8G,CAAqB5J,CAAAA,QAArB,EAAgCC,CAAAA,WAAhC,EAA8CkD,CAAAA,OAA9C,CAAsDwI,CAAE9J,CAAAA,KAAF,CAAQ,GAAR,CAAA,CAAa,CAAb,CAAtD,CAAA,GAAgFrB,CAAhF,CAAoFA,CAApF,CAAwF,GAAxF,CAA8FmL,CAA9F,CADuB,CAHxB,CAAA,CAMU,CAAX,CAAAnL,CAAEJ,CAAAA,MAAF,CAAeL,CAAf,CAAmB,GAAnB,CAAyBmB,CAAA,CAAaV,CAAEmH,CAAAA,SAAF,CAAY,CAAZ,CAAb,CAA6B,OAA7B,CAAzB,CAAiE5H,CAPjEgM,EAQAhM,CAlBiB,CAoDzBiM,QAASA,EAAc,EAAG,CACxB3L,CAAQ4L,CAAAA,WAAR,CAAsBxK,CAAA,EAAtB,CAA2C,EAC3CpB,EAAQ6L,CAAAA,OAAR,CAAkBC,mBAAA,EAAlB,CAA0C,EAC1C9L,EAAQ+L,CAAAA,SAAR,CAAoB9H,CAAA,EAApB,CAA8C,EAC9CwG,EAAA,EAJwB,CAY1BuB,QAASA,EAAqB,EAAG,CAC/B,MAAS,aAAD,GAAmBlI,QAASmI,CAAAA,UAA5B,EAA0C,UAA1C,GAAyDnI,QAASmI,CAAAA,UAAlE,EAAiFN,CAAA,EAAA,CAAkB,CAAA,CAAnG,EAAyG,CAAA,CADlF,CAx4CtB,IACPxK,EAAW,CAAA,CADJ,CAEToI,EAAuB,EAFd,CAGTvJ,EAAU,CACRC,UAAW,CAAC,cAAD,CADH,CAERiM,UAAW,CAAA,CAFH,CAGRC,aAAc,CAAA,CAHN,CAIRC,OAAQ,EAJA,CAKRC,WAAY,EALJ,CAMRC,QAAS,qBAND,CAORC,WAAY,EAPJ,CAQRC,cAAe,EARP,CASRC,cAAe,EATP,CAURC,aAAclB,QAASC,CAAAA,QAVf;AAWRkB,2BAA4B,CAAA,CAXpB,CAYRC,sBAAuB,QAZf,CAaRC,yBAA0B,WAblB,CAcRC,2BAA4B,SAdpB,CAeRC,0BAA2B,YAfnB,CAgBRC,6BAA8B,eAhBtB,CAiBRC,iCAAkC,eAjB1B,CAkBRC,4BAA6B,UAlBrB,CAmBRC,gCAAiC,kBAnBzB,CAoBRC,8BAA+B,wBApBvB,CAqBRC,wBAAyB,oBArBjB,CAsBRC,+BAAgC,CAAA,CAtBxB,CAuBRC,0BAA2B,QAvBnB;AAwBRC,6BAA8B,WAxBtB,CAyBRC,+BAAgC,SAzBxB,CA0BRC,8BAA+B,YA1BvB,CA2BRC,iCAAkC,eA3B1B,CA4BRC,qCAAsC,eA5B9B,CA6BRC,gCAAiC,UA7BzB,CA8BRC,oCAAqC,kBA9B7B,CA+BRC,kCAAmC,wBA/B3B,CAgCRC,4BAA6B,oBAhCrB,CAiCR5L,cAAeoJ,QAAS/J,CAAAA,QAASrB,CAAAA,OAAlB,CAA0B,QAA1B,CAAoC,EAApC,CAAwCR,CAAAA,WAAxC,EAjCP,CAkCRqO,eAAgB,OAlCR;AAmCRjD,cAAe,8NAnCP,CAoCRa,QAAS,CAAA,CApCD,CAqCRE,UAAW,CAAA,CArCH,CAsCR5F,aAAc,EAtCN,CAuCRyF,YAAa,CAAA,CAvCL,CAwCRsC,UAAW,CAAA,CAxCH,CAyCRtM,KAAM,kJAzCE,CA0CRiB,gBAAiB,CAAA,CA1CT,CA2CRlC,SAAU,cA3CF,CA4CRwN,eAAgB,CAAA,CA5CR;AA6CRC,iBAAkB,CAAA,CA7CV,CA8CRC,uBAAwB,IA9ChB,CA+CRC,aAAc,CAAA,CA/CN,CAgDRC,SAAU/C,QAAS/J,CAAAA,QAASrB,CAAAA,OAAlB,CAA0B,QAA1B,CAAoC,EAApC,CAAwCR,CAAAA,WAAxC,EAhDF,CAsVZ4O,UAAsB,EAAG,CACvB,GAAI,WAAJ,GAAoB,MAAOC,aAA3B,CAAyC,CACvC,IAAI/O,EAAI+O,YAAa7O,CAAAA,WAAb,EAA2B4B,CAAAA,KAA3B,CAAiC,GAAjC,CACRxB,EAAQyM,CAAAA,aAAR,CAAwB,KAFe,CAAzC,IAGO,CACL,IAAIjM,EAAIsD,QAAS4K,CAAAA,cAAT,CAAwB,gBAAxB,CACRC,YAAA,CAAcnO,CAAEoO,CAAAA,GAAI9O,CAAAA,KAAN,CAAY,iBAAZ,CAAA,CAA+B,CAA/B,CAAkCM,CAAAA,OAAlC,CAA0C,GAA1C,CAA+C,EAA/C,CACdV,EAAA,CAAIiP,WAAYnN,CAAAA,KAAZ,CAAkB,GAAlB,CACJxB,EAAQyM,CAAAA,aAAR,CAAwBjM,CAAEoO,CAAAA,GAAIpN,CAAAA,KAAN,CAAY,GAAZ,CAAA,CAAiB,CAAjB,CAJnB,CAMP,IAAKhB,CAAL,CAAS,CAAT,CAAYA,CAAZ,CAAgBd,CAAEK,CAAAA,MAAlB,CAA0BS,CAAA,EAA1B,CACE,OACEqO,aAAD,CAAiBtK,kBAAA,CAAmB7E,CAAA,CAAEc,CAAF,CAAKZ,CAAAA,WAAL,EAAnB,CAAjB;AACEkP,IADF,CACSD,aAAcrN,CAAAA,KAAd,CAAoB,GAApB,CAAA,CAAyB,CAAzB,CADT,CAEEuN,MAFF,CAEWF,aAAcrN,CAAAA,KAAd,CAAoB,GAApB,CAAA,CAAyB,CAAzB,CAFX,CAGCsN,IAJF,EAME,KAAK,KAAL,CACE,IADF,IACWxO,EAAIyO,MAAOvN,CAAAA,KAAP,CAAa,GAAb,CADf,CACkCa,EAAI,CAApC,CAAuCA,CAAvC,CAA2C/B,CAAEP,CAAAA,MAA7C,CAAqDsC,CAAA,EAArD,CACExC,CAAA,CAAeS,CAAA,CAAE+B,CAAF,CAAf,CAAA,GAAyBrC,CAAQC,CAAAA,SAAUV,CAAAA,IAAlB,CAAuBe,CAAA,CAAE+B,CAAF,CAAK2M,CAAAA,WAAL,EAAvB,CAAA,CAA4ChP,CAAQqO,CAAAA,sBAApD,CAA6E,KAAtG,CACF,MACF,MAAK,MAAL,CACW/N,CADX,CACeyO,MAAOvN,CAAAA,KAAP,CAAa,GAAb,CAAb,KAAgCa,CAAhC,CAAoC,CAApC,CAAuCA,CAAvC,CAA2C/B,CAAEP,CAAAA,MAA7C,CAAqDsC,CAAA,EAArD,CACExC,CAAA,CAAeS,CAAA,CAAE+B,CAAF,CAAf,CAAA,GAAyBrC,CAAQC,CAAAA,SAAUV,CAAAA,IAAlB,CAAuBe,CAAA,CAAE+B,CAAF,CAAK2M,CAAAA,WAAL,EAAvB,CAAA,CAA4ChP,CAAQqO,CAAAA,sBAApD,CAA6E,MAAtG,CACF,MACF,MAAK,QAAL,CACErO,CAAQoM,CAAAA,MAAR,CAAiB2C,MAAOC,CAAAA,WAAP,EACjB,MACF,MAAK,WAAL,CACEhP,CAAQqM,CAAAA,UAAR,CAAqB0C,MAAOC,CAAAA,WAAP,EACrB,MACF,MAAK,WAAL,CACEhP,CAAQuM,CAAAA,UAAR,CAAqBwC,MACrB;KACF,MAAK,cAAL,CACE/O,CAAQwM,CAAAA,aAAR,CAAwBuC,MACxB,MACF,MAAK,YAAL,CACEA,MAAA,CAAStP,CAAA,CAAmBsP,MAAnB,CACT,IAAI,CAAA,CAAJ,GAAWA,MAAX,EAAqB,CAAA,CAArB,GAA4BA,MAA5B,CACE/O,CAAQsN,CAAAA,8BAAR,CAAyCyB,MAC3C,MACF,MAAK,SAAL,CACEA,MAAA,CAAStP,CAAA,CAAmBsP,MAAnB,CACT,IAAI,CAAA,CAAJ,GAAWA,MAAX,EAAqB,CAAA,CAArB,GAA4BA,MAA5B,CACE/O,CAAQmO,CAAAA,cAAR,CAAyBY,MAC3B,MACF,MAAK,UAAL,CACEA,MAAA,CAAStP,CAAA,CAAmBsP,MAAnB,CACT,IAAI,CAAA,CAAJ,GAAWA,MAAX,EAAqB,CAAA,CAArB,GAA4BA,MAA5B,CACE/O,CAAQoO,CAAAA,gBAAR,CAA2BW,MAC7B,MACF,MAAK,QAAL,CACEA,MAAA,CAAStP,CAAA,CAAmBsP,MAAnB,CACT,IAAI,CAAA,CAAJ,GAAWA,MAAX,EAAqB,CAAA,CAArB,GAA4BA,MAA5B,CACE/O,CAAQsO,CAAAA,YAAR,CAAuBS,MACzB,MACF,MAAK,cAAL,CACEA,MAAA,CAAS7O,CAAA,CAAe,GAAf,CAAoB6O,MAApB,CACT,GAAA,GAAOA,MAAP,GACG/O,CAAQuN,CAAAA,yBADX;AACuCwB,MADvC,CAEA,MACF,MAAK,iBAAL,CACEA,MAAA,CAAS7O,CAAA,CAAe,GAAf,CAAoB6O,MAApB,CACT,GAAA,GAAOA,MAAP,GACG/O,CAAQwN,CAAAA,4BADX,CAC0CuB,MAD1C,CAEA,MACF,MAAK,eAAL,CACEA,MAAA,CAAS7O,CAAA,CAAe,GAAf,CAAoB6O,MAApB,CACT,GAAA,GAAOA,MAAP,GACG/O,CAAQyN,CAAAA,8BADX,CAC4CsB,MAD5C,CAEA,MACF,MAAK,aAAL,CACEA,MAAA,CAAS7O,CAAA,CAAe,GAAf,CAAoB6O,MAApB,CACT,GAAA,GAAOA,MAAP,GACG/O,CAAQ0N,CAAAA,6BADX,CAC2CqB,MAD3C,CAEA,MACF,MAAK,gBAAL,CACEA,MAAA,CAAS7O,CAAA,CAAe,GAAf,CAAoB6O,MAApB,CACT,GAAA,GAAOA,MAAP,GACG/O,CAAQ2N,CAAAA,gCADX,CAC8CoB,MAD9C,CAEA,MACF,MAAK,iBAAL,CACEA,MAAA,CAAS7O,CAAA,CAAe,GAAf,CAAoB6O,MAApB,CACT,GAAA,GAAOA,MAAP,GACG/O,CAAQ4N,CAAAA,oCADX;AACkDmB,MADlD,CAEA,MACF,MAAK,mBAAL,CACEA,MAAA,CAAS7O,CAAA,CAAe,GAAf,CAAoB6O,MAApB,CACT,GAAA,GAAOA,MAAP,GACG/O,CAAQ6N,CAAAA,+BADX,CAC6CkB,MAD7C,CAEA,MACF,MAAK,uBAAL,CACEA,MAAA,CAAS7O,CAAA,CAAe,GAAf,CAAoB6O,MAApB,CACT,GAAA,GAAOA,MAAP,GACG/O,CAAQ8N,CAAAA,mCADX,CACiDiB,MADjD,CAEA,MACF,MAAK,KAAL,CACE/O,CAAQiO,CAAAA,cAAR,CAA4C,MAA5C,CAAyBxG,QAAA,CAASsH,MAAT,CACzB,MACF,MAAK,IAAL,CACE/O,CAAQgL,CAAAA,aAAR,EAAyB,GAAzB,CAA+B+D,MAAO3O,CAAAA,OAAP,CAAe,IAAf,CAAqB,GAArB,CAC/B,MACF,MAAK,MAAL,CACEJ,CAAQ4B,CAAAA,IAAR,EAAgB,GAAhB,CAAsBmN,MAAO3O,CAAAA,OAAP,CAAe,IAAf,CAAqB,GAArB,CACtB,MACF,MAAK,WAAL,CACE2O,MAAA,CAAStP,CAAA,CAAmBsP,MAAnB,CACT,IAAI,CAAA,CAAJ,GAAWA,MAAX,EAAqB,CAAA,CAArB,GAA4BA,MAA5B,CAAoC/O,CAAQ+L,CAAAA,SAAR,CAAoBgD,MACxD,MACF,MAAK,IAAL,CACEA,MAAA;AAAStP,CAAA,CAAmBsP,MAAnB,CACT,IAAI,CAAA,CAAJ,GAAWA,MAAX,EAAqB,CAAA,CAArB,GAA4BA,MAA5B,CAAoC/O,CAAQ6L,CAAAA,OAAR,CAAkBkD,MACtD,MACF,MAAK,KAAL,CACE/O,CAAQmG,CAAAA,YAAR,CAAyB,cAAexD,CAAAA,IAAf,CAAoBoM,MAApB,CAAA,CAA8BtH,QAAA,CAASsH,MAAT,CAA9B,CAAiD,EAC1E,MACF,MAAK,aAAL,CACEA,MAAA,CAAStP,CAAA,CAAmBsP,MAAnB,CACT,IAAI,CAAA,CAAJ,GAAWA,MAAX,EAAqB,CAAA,CAArB,GAA4BA,MAA5B,CAAoC/O,CAAQ4L,CAAAA,WAAR,CAAsBmD,MAC1D,MACF,MAAK,WAAL,CACEA,MAAA,CAAStP,CAAA,CAAmBsP,MAAnB,CACT,IAAI,CAAA,CAAJ,GAAWA,MAAX,EAAqB,CAAA,CAArB,GAA4BA,MAA5B,CAAoC/O,CAAQkO,CAAAA,SAAR,CAAoBa,MACxD,MACF,MAAK,MAAL,CACE/O,CAAQ6C,CAAAA,eAAR,CAA0BpD,CAAA,CAAmBsP,MAAnB,CAnH9B,CAXqB,CAAzBP,CAnSA,EAkLE,IAAI1K,QAAS0H,CAAAA,QAASjK,CAAAA,IAAKzB,CAAAA,KAAvB,CAA6B,8BAA7B,CAAJ,EAAoEE,CAAQsO,CAAAA,YAA5E,CACEtO,CAAQC,CAAAA,SAAR,CAAkB,CAAlB,CAAA,CAAuB,cAS3BgP,UAAuB,EAAE,CACtB,iDAAkDtM,CAAAA,IAAlD,CAAuD6I,QAAS/H,CAAAA,QAAhE,CAAA;AAA2EzD,CAAQkO,CAAAA,SAAnF,CAA+F,CAAA,CAA/F,CAAoGlO,CAAQkO,CAAAA,SAA5G,CAAwH,CAAA,CACzH,IAAGlO,CAAQkO,CAAAA,SAAX,CAAqB,CAIlB,SAAS,EAAG,CACX,IAAIgB,EAAWpL,QAASqL,CAAAA,aAAT,CAAuB,QAAvB,CACfD,EAASN,CAAAA,GAAT,CAAe,2EAIfM,EAASE,CAAAA,MAAT,CAAkBC,QAAS,EAAG,CAC5BC,SAAUC,CAAAA,KAAV,CAAgBC,CAAhB,CACAF,UAAUG,CAAAA,KAAV,CAAgBD,CAAhB,CACAF,UAAUI,CAAAA,KAAV,CAAgBF,CAAhB,CACAF,UAAUK,CAAAA,KAAV,CAAgBH,CAAhB,CACAF,UAAUM,CAAAA,MAAV,CAAiBJ,CAAjB,CACAF,UAAUO,CAAAA,KAAV,CAAgBL,CAAhB,CAN4B,CAQ9B1L,SAASgM,CAAAA,IAAKC,CAAAA,WAAd,CAA0Bb,CAA1B,CAdW,CAAZ,CAAD,EAoBAM,SAASA,EAAqB,CAAC,CAAC,KAAAtG,CAAD,CAAO,MAAA8G,CAAP,CAAc,MAAAtH,CAAd,CAAqB,GAAA1F,CAArB,CAAkC,OAAAiN,CAAlC,CAA0C,YAAAC,CAA1C,CAAD,CAAyD,CAErF3P,CAAA,CAAW2I,CAAX,CAAiB,CAEfR,MAAOsH,CAFQ,CAIfG,UAAWnN,CAJI,CAKfoN,aAAc1H,CALC,CAMf2H,aAAcL,CANC,CAWfM,cAAeL,CAXA,CAafM,aAdgBL,CAAAM,CAAcN,CAAYO,CAAAA,kBAA1BD;AAA8CN,CAAYQ,CAAAA,OAA1DF,EAAmEN,CAAYS,CAAAA,WAA/EH,EAA4F,EAA5FA,CAAiG,WAClG,CAcfI,iBAAkBV,CAAA,CAAcA,CAAYW,CAAAA,SAA1B,EAAqC,EAArC,CAA0C,EAd7C,CAefC,aAAcZ,CAAA,CAAcA,CAAYa,CAAAA,SAA1B,EAAqC,EAArC,CAA0C,EAfzC,CAgBfC,WAAYd,CAAA,CAAcA,CAAYe,CAAAA,gBAA1B,EAA6Cf,CAAYgB,CAAAA,QAAzD,EAAmEhB,CAAYgB,CAAAA,QAASC,CAAAA,SAAxF,EAAoGjB,CAAYkB,CAAAA,SAAhH,EAA2H,EAA3H,CAA+H,EAhB5H,CAAjB,CAFqF,CAxBpE,CAFE,CAAzBnC,CA1LA,EAGA,KAAIoC,EAAWvN,QAASwN,CAAAA,oBAAT,CAA8B,MAA9B,CAAsCC,CAAAA,IAAtC,CAA2C,CAA3C,CAAf,CACIC,EAAY1N,QAASqL,CAAAA,aAAT,CAAuB,QAAvB,CAChBqC,EAAU9K,CAAAA,YAAV,CAAuB,MAAvB,CAA+B,iBAA/B,CACA8K,EAAU9K,CAAAA,YAAV,CACE,KADF,CAEE,8CAFF,CAEmD1G,CAAQC,CAAAA,SAAR,CAAkB,CAAlB,CAFnD,CAIAoR,EAAStB,CAAAA,WAAT,CAAqByB,CAArB,CACAC,OAAOnS,CAAAA,SAAP,CAAmBmS,MAAOnS,CAAAA,SAA1B,EAAuC,EAcvCD,EAAA,CAAK,IAAL,CAAW,IAAIqS,IAAf,CACArS,EAAA,CAAK,KAAL,CAAY,CAAE,aAAgB,wBAAlB;AAA4C,eAAkB,QAA9D,CAAZ,CAoBAoS,OAAOE,CAAAA,GAAP,CAAaC,QAAS,CAAClS,CAAD,CAAIc,CAAJ,CAAOF,CAAP,CAAU+B,CAAV,CAAaC,CAAb,CAAgBC,CAAhB,CAAmBC,CAAnB,CAAsB,CAC1C,GACE,IAAK,EADP,GACa9C,CADb,EAEE,EAFF,GAESA,CAFT,EAGE,IAAK,EAHP,GAGac,CAHb,EAIE,EAJF,GAISA,CAJT,EAKE,IAAK,EALP,GAKaF,CALb,EAME,EANF,GAMSA,CANT,CAQE,GAAI,UAAJ,GAAmBE,CAAEZ,CAAAA,WAAF,EAAnB,CACE,GAAI,CACFU,CAEG,CAFCyK,CAAA,CAAYE,CAAA,CAAa3K,CAAb,CAAZ,CAA6BkB,CAAAA,KAA7B,CAAmC,KAAnC,CAAA,CAA0C,CAA1C,CAED,CADHjB,CAAA,CAAW,WAAX,CAAwB,CAAEsR,cAAevR,CAAjB,CAAoBwR,WAAY,IAAK,EAAL,GAAWzP,CAAX,EAAgB,EAAhB,GAAuBA,CAAvB,CAA2ByB,QAASiO,CAAAA,KAApC,CAA4C1P,CAA5E,CAAxB,CACG,CAAClB,CAAD,CAAaD,CAAA,CAAsB,CAAE8Q,YAAa7Q,CAAf,CAAtB,CAAb,CAAgE,EAHjE,CAKF,MAAOoK,CAAP,CAAU,EANd,IAOK,IAAI,OAAJ,GAAgB/K,CAAEZ,CAAAA,WAAF,EAAhB,EAAmC,IAAK,EAAxC,GAA8CyC,CAA9C,EAAmD,EAAnD,GAA0DA,CAA1D,CACH,GAAI,CACE3B,CAIJ,CAJQ,CAAA,CAIR,CAHA,IAAK,EAGL,GAHW8B,CAGX,EAFE,SAEF,GAFgB,MAAO/C,EAAA,CAAmB+C,CAAnB,CAEvB,GADG9B,CACH,CADOjB,CAAA,CAAmB+C,CAAnB,CACP,EAAAjC,CAAA,CAAW,WAAX,CAAwB,CACtB0R,eAAgB3R,CADM,CAEtB4R,aAAc7P,CAFQ,CAGtB8P,YAAa,IAAK,EAAL,GAAW7P,CAAX,CAAe,EAAf,CAAoBA,CAHX,CAItB8P,YAAa,IAAK,EAAL;AAAW7P,CAAX,EAAgB,EAAhB,GAAuBA,CAAvB,EAA4BiF,KAAA,CAAMjF,CAAN,CAA5B,CAAuC,CAAvC,CAA2CkF,QAAA,CAASlF,CAAT,CAJlC,CAKtB8P,gBAAiB3R,CALK,CAAxB,CALE,CAYF,MAAO6K,CAAP,CAAU,EAbT,IAcI,CAAC,CAAL,EAAU/K,CAAEZ,CAAAA,WAAF,EAAgBkD,CAAAA,OAAhB,CAAwB,WAAxB,CAAV,EAGUtC,CAAEZ,CAAAA,WAAF,EAAgBkD,CAAAA,OAAhB,CAAwB,QAAxB,CAjCyB,CAmD5C2O,OAAO7G,CAAAA,IAAP,CAAc0H,QAAS,CAAC5S,CAAD,CAAIc,CAAJ,CAAO,CAC5B,GAAI,IAAK,EAAT,GAAed,CAAf,EAAoB,EAApB,GAA2BA,CAA3B,EAAgC,IAAK,EAArC,GAA2Cc,CAA3C,EAAgD,QAAhD,GAA6D,MAAOA,EAApE,CAEE,GADAd,CACI,CADAQ,CAAA,CAAe,GAAf,CAAoBR,CAApB,CACA,CAAA,WAAA,GAAgBA,CAAEE,CAAAA,WAAF,EAApB,CACE,GAAI,CAC4B,CAA9B,GAAIgH,MAAOkB,CAAAA,IAAP,CAAYtH,CAAZ,CAAeT,CAAAA,MAAnB,GAEES,CAAEqR,CAAAA,aAE2B,CAFX9G,CAAA,CAAYE,CAAA,CADnBzK,CAAEqR,CAAAA,aAAHU,CAAoB/R,CAAEqR,CAAAA,aAAtBU,CAAsC/G,QAASjK,CAAAA,IAC3B,CAAZ,CAA8BC,CAAAA,KAA9B,CAAoC,KAApC,CAAA,CAA2C,CAA3C,CAEW,CAD7BhB,CAAEsR,CAAAA,UAC2B,CADZtR,CAAEsR,CAAAA,UAAH,CAAiBtR,CAAEsR,CAAAA,UAAnB,CAAgChO,QAASiO,CAAAA,KAC5B,CAA7BxR,CAAA,CAAW,WAAX,CAAwBC,CAAxB,CAA6B,CAACW,CAAD,CAAcD,CAAA,CAAsB,CAAE8Q,YAAa7Q,CAAf,CAAtB,CAAd,CAAkE,EAJjG,CADE,CAOF,MAAOoK,CAAP,CAAU,EARd,IAUE,IAAI,CACF,IAAIvF;AAAQ,yRAA0RrD,CAAAA,IAA1R,CAA+RjD,CAA/R,CAAD,CAAsSA,CAAtS,CAA0S,WACvR,EAA9B,GAAIkH,MAAOkB,CAAAA,IAAP,CAAYtH,CAAZ,CAAeT,CAAAA,MAAnB,CAAmCQ,CAAA,CAAWyF,CAAX,CAAgBxF,CAAhB,CAAnC,CACOD,CAAA,CAAWyF,CAAX,CAHL,CAIF,MAAOuF,CAAP,CAAU,EAjBY,CAg1B9BiH,UAA4B,EAAG,CAC7Bf,MAAOgB,CAAAA,WAAP,CAAqBhB,MAAOgB,CAAAA,WAA5B,EAA2C,CAAA,CAC3C,IAAI,CAAChB,MAAOgB,CAAAA,WAAZ,CAAyB,CACvBhB,MAAOgB,CAAAA,WAAP,CAAqB,CAAA,CACrB,IAAI,CACF,IAAIC,EAAKjB,MAAOkB,CAAAA,SAAUC,CAAAA,UAA1B,CACIC,EAAY7S,CAAQC,CAAAA,SAAUoI,CAAAA,IAAlB,CAAuB,GAAvB,CAWhBoJ;MAAOkB,CAAAA,SAAUC,CAAAA,UAAjB,CAA8BE,QAAS,EAAG,CACxC,GAAItT,SAAJ,EAAiBA,SAAA,CAAU,CAAV,CAAaM,CAAAA,KAAb,CAAmB,8BAAnB,CAAjB,EAAyEN,SAAA,CAAU,CAAV,CAAaM,CAAAA,KAAb,CAAmB,IAAI6B,MAAJ,CAAWkR,CAAX,CAAnB,CAAzE,CAAoH,CAAA,IAC9GE,EAAWvT,SAAA,CAAU,CAAV,CAAagC,CAAAA,KAAb,CAAmB,GAAnB,CAAA,CAAwB,CAAxB,CADmG,CACvEwR,EAAQxT,SAAA,CAAU,CAAV,CAAagC,CAAAA,KAAb,CAAmB,GAAnB,CAAA,CAAwB,CAAxB,CAEtB,EAAA,CAAAX,CAAA,CAAamS,CAAb,CAAoB,KAApB,CAAoC,KAAA,EAAA,EAE7DxT,UAAA,CAAU,CAAV,CAAJ,EACEA,SAAA,CAAU,CAAV,CAAagC,CAAAA,KAAb,CAAmB,MAAnB,CAA2BgH,CAAAA,OAA3B,CAAmC,QAAS,CAAC1G,CAAD,CAAQ,CAC3CmR,CAAO1T,CAAAA,IAAd,CAAmBsB,CAAA,CAAaiB,CAAb,CAAoB,KAApB,CAAnB,CADkD,CAApD,CAIFtC,UAAA,CAAU,CAAV,CAAA,CAAe,CAPHuT,CAOG,CAAyBC,CAAzB,CAAgC3K,CAAAA,IAAhC,CAAqC,GAArC,CACX7I,UAAA,CAAU,CAAV,CAAJ,EAA2C,CAA3C,CAA2ByT,CAAOlT,CAAAA,MAAlC,GACSkT,CAAO5K,CAAAA,IAAd,CAAmB,MAAnB,CACA,CAAA7I,SAAA,CAAU,CAAV,CAAA,CAAsByT,CAAO5K,CAAAA,IAAd,CAAmB,MAAnB,CAFjB,CAXkH,CAgBpH,MAAOqK,EAAGQ,CAAAA,KAAH,CAAS,IAAT,CAAe1T,SAAf,CAjBiC,CAbxC,CAgCF,MAAO+C,CAAP,CAAU,CAAE,MAAOmQ,EAAGQ,CAAAA,KAAH,CAAS,IAAT,CAAe1T,SAAf,CAAT,CAlCW,CAFI,CAA/BgT,CApzBE,EAaA,uEAAuE7P,CAAAA,IAAvE,CACE3C,CAAQ6C,CAAAA,eAAgBlD,CAAAA,QAAxB,EADF,CAAA;CAGMK,CAAQoC,CAAAA,aAAT,CAAyBpC,CAAQ6C,CAAAA,eAAgBjD,CAAAA,WAAxB,EAAsCQ,CAAAA,OAAtC,CAC1B,SAD0B,CAE1B,EAF0B,CAAzB,CAIAJ,CAAQ6C,CAAAA,eAJR,CAI0B,CAAA,CAP/B,EAQI,CAAA,CAAA,GAAO7C,CAAQ6C,CAAAA,eAAf,EACI7C,CAAQoC,CAAAA,aAAT,CAAyB0B,QAAS0H,CAAAA,QAAS/J,CAAAA,QAAS3B,CAAAA,KAA3B,CAC1B,sEAD0B,CAAA,CAE1B,CAF0B,CAAzB,CAGAE,CAAQ6C,CAAAA,eAHR,CAG0B,CAAA,CAJ7B,GAKI7C,CAAQoC,CAAAA,aAAT,CAAyBoJ,QAAS/J,CAAAA,QAClC7B,CAAAA,WADyB,EAEzBQ,CAAAA,OAFyB,CAEjB,SAFiB,CAEN,EAFM,CAAzB,CAGAJ,CAAQ6C,CAAAA,eAHR,CAG0B,CAAA,CAR7B,CAeJ7C,EAAQoM,CAAAA,MAAR,CAAiBpM,CAAQoM,CAAAA,MAAzB,EAAmC,cAAnC,CAAoDpM,CAAQoC,CAAAA,aAC5DpC,EAAQqM,CAAAA,UAAR,CAAqBrM,CAAQqM,CAAAA,UAA7B,EAA2C,EAA3C,CAAgDrM,CAAQoC,CAAAA,aACxDpC,EAAQuM,CAAAA,UAAR,CACEvM,CAAQuM,CAAAA,UADV,EACwB,cADxB,CACyCvM,CAAQoC,CAAAA,aACjDpC;CAAQwM,CAAAA,aAAR,CACExM,CAAQwM,CAAAA,aADV,EAC2B,cAD3B,CAC4CxM,CAAQoC,CAAAA,aAwoCtD+Q,UAAsB,EAAG,CACvB,IAAIC,EAAU,CACZ,UAAW,kMAAA,CAAA,KAAA,CAAA,GAAA,CADC,CAEZ,IAAO,CAAC,WAAD,CAAc,OAAd,CAFK,CAGZ,IAAO,CAAC,eAAD,CAHK,CAIZ,IAAO,0PAAA,CAAA,KAAA,CAAA,GAAA,CAJK;AAKZ,IAAO,CAAC,OAAD,CAAU,gBAAV,CALK,CAMZ,IAAO,CAAC,QAAD,CANK,CAOZ,KAAQ,CAAC,SAAD,CAAY,WAAZ,CAAyB,gBAAzB,CAA2C,OAA3C,CAAoD,SAApD,CAPI,CAQZ,IAAO,CAAC,KAAD,CAAQ,OAAR,CAAiB,MAAjB,CAAyB,QAAzB,CAAmC,IAAnC,CARK,CASZ,IAAO,gMAAA,CAAA,KAAA,CAAA,GAAA,CATK,CAUZ,GAAM,CAAC,IAAD,CAVM,CAWZ,IAAO,CAAC,GAAD,CAXK,CAYZ,IAAO,8BAAA,CAAA,KAAA,CAAA,GAAA,CAZK,CAcd7J,EAAA,CAAuB6J,CAAQC,CAAAA,OAAQjJ,CAAAA,MAAhB,CAAuBgJ,CAAA,CAAQpT,CAAQoM,CAAAA,MAAOxM,CAAAA,WAAf,EAAR,CAAvB,CAA8DwK,CAAAA,MAA9D,CAAqEpK,CAAQgL,CAAAA,aAAcpL,CAAAA,WAAtB,EAAoC4B,CAAAA,KAApC,CAA0C,GAA1C,CAArE,CAfA,CAAzB2R,CA9qCE,EAyWFG;SAAsB,CAAC5T,CAAD,CAAI,CACd4L,CAAAA,CAAI,SACd,IAAI,CAAE,IAAAiI,EAAMvT,CAAQmO,CAAAA,cAAT,EAA2B7C,CAAE3I,CAAAA,IAAF,CAAO6Q,eAAgBC,CAAAA,GAAvB,CAA3B,CAA0DjI,QAASC,CAAAA,QAAnE,CAA8E,IAA9E,CAAqFD,QAAS/J,CAAAA,QAA9F,CAAyG+R,eAAgBC,CAAAA,GAAIrT,CAAAA,OAApB,CAA4BoL,QAASC,CAAAA,QAArC,CAAgD,IAAhD,CAAuDD,QAAS/J,CAAAA,QAAhE,CAA0E,EAA1E,CAAzG,CAAyLqC,QAAS0H,CAAAA,QAASjK,CAAAA,IAAO,KAAAgK,EAAMvL,CAAQoO,CAAAA,gBAAT,CAA6BoF,eAAgBzB,CAAAA,KAA7C,CAAqDjO,QAASiO,CAAAA,KAA5R,CAAsS,MAAOlO,CAAP,CAAc,CAAE0P,CAA4B,CAAxBzP,QAAS0H,CAAAA,QAASjK,CAAAA,IAAM,CAAAgK,CAAA,CAAIzH,QAASiO,CAAAA,KAA3C,CACpTzR,CAAAA,CAAIiT,CAAE/R,CAAAA,KAAF,CAAQsC,QAAS0H,CAAAA,QAAS/J,CAAAA,QAA1B,CAAA,CAAoC,CAApC,CACR,EAAC,CAAD,GAAOqC,QAASiO,CAAAA,KAAM2B,CAAAA,MAAf,CAAsB,gBAAtB,CAAP,GACGpT,CADH,CACwBF,CAAhB,UAAgBA,CAAHE,CAAGF,EAAAA,OAAjB,CAAyB,OAAzB,CAAkC,GAAlC,CADP,EACkD0D,QAAS6P,CAAAA,QAAV,CAAsB,GAAtB,CAA4B7P,QAAS6P,CAAAA,QAArC,CAAgD7P,QAAS6P,CAAAA,QAD1G,EAEI3M;CAAAA,CAAM,CAAC,CAAF,GAAQlD,QAASiO,CAAAA,KAAM2B,CAAAA,MAAf,CAAsB,iBAAtB,CAAR,CAAoD5P,QAAS0H,CAAAA,QAASC,CAAAA,QAAtE,CAAiF,IAAjF,CAAwF3H,QAAS0H,CAAAA,QAAS/J,CAAAA,QAA1G,CAAqHnB,CAArH,CAAyHiT,CAC9HhB,EAAAA,CAAKxH,CAAA,CAAYE,CAAA,CAAajE,CAAb,CAAZ,CAET,KAASxG,CAAT,CAAa,CAAb,CAAgBA,CAAhB,CAAoBR,CAAQC,CAAAA,SAAUF,CAAAA,MAAtC,CAA8CS,CAAA,EAA9C,CAAmD,CACjD,GAAU,CAAV,GAAIA,CAAJ,CAAa,CACX,IAAAkL,EAAI,CACFkI,OAAQ5T,CAAQW,CAAAA,QAAhBiT,CAA2BpT,CADzB,CAEFqT,eAAgBpM,QAAA,CAASzH,CAAQiO,CAAAA,cAAjB,CAFd,CAIF4D,cAAeU,CAJb,CAKFT,WAAYvG,CALV,CAMF,CAACvL,CAAQ4M,CAAAA,qBAAT,EAAiC5M,CAAQoM,CAAAA,MAAO4C,CAAAA,WAAf,EAN/B,CAOF,CAAChP,CAAQ6M,CAAAA,wBAAT,EAAoC7M,CAAQqM,CAAAA,UAAW2C,CAAAA,WAAnB,EAPlC,CAQF,CAAChP,CAAQ+M,CAAAA,yBAAT,EAAqC/M,CAAQuM,CAAAA,UAAW3M,CAAAA,WAAnB,EARnC,CASF,CAACI,CAAQgN,CAAAA,4BAAT,EAAwChN,CAAQwM,CAAAA,aAAc5M,CAAAA,WAAtB,EATtC,CAUF,CAACI,CAAQiN,CAAAA,gCAAT,EAA4CjN,CAAQyM,CAAAA,aAAc7M,CAAAA,WAAtB,EAV1C;AAWF,CAACI,CAAQ8M,CAAAA,0BAAT,EAAsC9M,CAAQsM,CAAAA,OAAQ1M,CAAAA,WAAhB,EAXpC,CAYF,CAACI,CAAQkN,CAAAA,2BAAT,EAAuClN,CAAQ0M,CAAAA,YAAa9M,CAAAA,WAArB,EAZrC,CAaF,CAACI,CAAQoN,CAAAA,6BAAT,EAAyCpN,CAAQqO,CAAAA,sBAAuBzO,CAAAA,WAA/B,EAbvC,CAcF,CAACI,CAAQqN,CAAAA,uBAAT,EAAmCrN,CAAQuO,CAAAA,QAAS3O,CAAAA,WAAjB,EAdjC,CAgBFkE,SAAS6P,CAAAA,QAAV,EAAsB,CAAC,CAAvB,GAA6B7P,QAAS6P,CAAAA,QAASD,CAAAA,MAAlB,CAAyBlI,QAAS/J,CAAAA,QAAlC,CAA7B,CAA6EiK,CAAEoI,CAAAA,aAA/E,CAA+F7I,CAAA,CAAanH,QAAS6P,CAAAA,QAAtB,CAA/F,CAAmIjI,CAAEoI,CAAAA,aAArI,CAAqJhQ,QAAS6P,CAAAA,QAC3JI,EAAAA,CAAKlT,CAAA,CAAaC,CAAA,CAAY4K,CAAZ,CAAb,CAA6B,SAA7B,CAlBE,CAAb,IAwBEA,EAiBA,CAlBW,CAAR,CAAIlL,CAAJ,EAAaR,CAAQsN,CAAAA,8BAArB,CACC,CACFsG,OAAQ5T,CAAQW,CAAAA,QAAhBiT,CAA2BpT,CADzB,CAEFqT,eAAgBpM,QAAA,CAASzH,CAAQiO,CAAAA,cAAjB,CAFd;AAIF4D,cAAeU,CAJb,CAKFT,WAAYvG,CALV,CAMF,CAACvL,CAAQuN,CAAAA,yBAAT,EAAqCvN,CAAQoM,CAAAA,MAAO4C,CAAAA,WAAf,EANnC,CAOF,CAAChP,CAAQwN,CAAAA,4BAAT,EAAwCxN,CAAQqM,CAAAA,UAAW2C,CAAAA,WAAnB,EAPtC,CAQF,CAAChP,CAAQ0N,CAAAA,6BAAT,EAAyC1N,CAAQuM,CAAAA,UAAW3M,CAAAA,WAAnB,EARvC,CASF,CAACI,CAAQ2N,CAAAA,gCAAT,EAA4C3N,CAAQwM,CAAAA,aAAc5M,CAAAA,WAAtB,EAT1C,CAUF,CAACI,CAAQ4N,CAAAA,oCAAT,EAAgD5N,CAAQyM,CAAAA,aAAc7M,CAAAA,WAAtB,EAV9C,CAWF,CAACI,CAAQyN,CAAAA,8BAAT,EAA0CzN,CAAQsM,CAAAA,OAAQ1M,CAAAA,WAAhB,EAXxC,CAYF,CAACI,CAAQ6N,CAAAA,+BAAT,EAA2C7N,CAAQ0M,CAAAA,YAAa9M,CAAAA,WAArB,EAZzC,CAaF,CAACI,CAAQ+N,CAAAA,iCAAT,EAA6C/N,CAAQqO,CAAAA,sBAAuBzO,CAAAA,WAA/B,EAb3C;AAcF,CAACI,CAAQgO,CAAAA,2BAAT,EAAuChO,CAAQuO,CAAAA,QAAS3O,CAAAA,WAAjB,EAdrC,CADD,CAwBC,CACFgU,OAAQ5T,CAAQW,CAAAA,QAAhBiT,CAA2BpT,CADzB,CAEFqT,eAAgBpM,QAAA,CAASzH,CAAQiO,CAAAA,cAAjB,CAFd,CAIF4D,cAAeU,CAJb,CAKFT,WAAYvG,CALV,CANJ,CADEzH,QAAS6P,CAAAA,QAAV,EAAsB,CAAC,CAAvB,GAA6B7P,QAAS6P,CAAAA,QAASD,CAAAA,MAAlB,CAAyBlI,QAAS/J,CAAAA,QAAlC,CAA7B,CAA6EiK,CAAEoI,CAAAA,aAA/E,CAA+F7I,CAAA,CAAanH,QAAS6P,CAAAA,QAAtB,CAA/F,CAAmIjI,CAAEoI,CAAAA,aAArI,CAAqJhQ,QAAS6P,CAAAA,QAC/J,CAAII,CAAJ,CAASlT,CAAA,CAAaC,CAAA,CAAY4K,CAAZ,CAAb,CAA6B,SAA7B,CAtBTqI,EAAA,CAAKhT,CAAA,CAAagT,CAAb,CACLA,EAAA,CAAK/S,CAAA,CAAe+S,CAAf,CACL1U,EAAA,CAAK,QAAL,CAAeW,CAAQC,CAAAA,SAAR,CAAkBO,CAAlB,CAAf,CAAqCuT,CAArC,CAtB+C,CA8DjD5S,CAAD,CAAaD,CAAA,CAAsB,CAAE8Q,YAAa7Q,CAAf,CAAtB,CAAb,CAAgE,EAvEzC,CAA1BmS,CAxWE,EA0IF,KAAIjT,EAAM,CA4aV,IAAIL,CAAQ6L,CAAAA,OAAZ,CAAqB,CACfmI,CAAAA,CAAMlQ,QAASqL,CAAAA,aAAT,CAAuB,QAAvB,CACV6E,EAAIpF,CAAAA,GAAJ,CAAU,oCACNqF,EAAAA,CAAiBnQ,QAASwN,CAAAA,oBAAT,CAA8B,QAA9B,CAAA,CAAwC,CAAxC,CACrB2C;CAAeC,CAAAA,UAAWC,CAAAA,YAA1B,CAAuCH,CAAvC,CAA4CC,CAA5C,CACA,KAAIG,EAAa,EAAjB,CACIC,EAAc,EADlB,CAEIC,EAAW,EAFf,CAIIC,EAAuBvU,CAAQmG,CAAAA,YAJnC,CAKIqO,EAAU,EAKdC,wBAAA,CAA0BA,QAAS,EAAG,CACpC,IAAK,IAAIhS,EAAI,CAAb,CAAgBA,CAAhB,CAAoB2R,CAAWrU,CAAAA,MAA/B,CAAuC0C,CAAA,EAAvC,CACE4R,CAAA,CAAY5R,CAAZ,CAAA,CAAiB,IAAIiS,EAAGC,CAAAA,MAAP,CAAcP,CAAA,CAAW3R,CAAX,CAAd,CAA6B,CAC5CwQ,OAAQ,CACN,QAAW2B,aADL,CAEN,cAAiBC,mBAFX,CAGN,QAAWC,aAHL,CADoC,CAA7B,CAFiB,CAgBtCF,cAAA,CAAgBA,QAAS,CAAC9S,CAAD,CAAQ,EAOjCgT,cAAA,CAAgBA,QAAS,CAAChT,CAAD,CAAQ,CAC/BvB,CAAA,CAAW,aAAX,CAA0B,CAAEwU,WAA0CxN,IAAAA,EAA7B,GAACzF,CAAMG,CAAAA,MAAO+S,CAAAA,UAAd,CAA0ClT,CAAMG,CAAAA,MAAO+S,CAAAA,UAAWC,CAAAA,SAAUlD,CAAAA,KAA5E,CAAoFjQ,CAAMG,CAAAA,MAAOiT,CAAAA,YAAb,EAA4BnD,CAAAA,KAA/H,CAA1B,CAD+B,CAUjC8C,oBAAA,CAAsBA,QAAS,CAAC/S,CAAD,CAAQ,CACrC,GAAI,CAEF,IAFE,IACEqT,EAAa,CADf,CACkB1Q,EAAyC8C,IAAAA,EAA7B,GAACzF,CAAMG,CAAAA,MAAO+S,CAAAA,UAAd;AAA0ClT,CAAMG,CAAAA,MAAO+S,CAAAA,UAAWC,CAAAA,SAAUxQ,CAAAA,QAA5E,CAAuF3C,CAAMG,CAAAA,MAAOiT,CAAAA,YAAb,EAA4BzQ,CAAAA,QADjJ,CAEO6G,EAAI,CAAb,CAAgBA,CAAhB,CAAoB8I,CAAWrU,CAAAA,MAA/B,CAAuCuL,CAAA,EAAvC,CACM8I,CAAA,CAAW9I,CAAX,CAAJ,EAAqB7G,CAArB,GACE0Q,CADF,CACe7J,CADf,CAIF,KAAI8J,EAAiD7N,IAAAA,EAAxC,GAAC8M,CAAA,CAAYc,CAAZ,CAAwBH,CAAAA,UAAzB,CAAqD/P,IAAKC,CAAAA,KAAL,CAAWmP,CAAA,CAAYc,CAAZ,CAAwBH,CAAAA,UAAW7P,CAAAA,WAA9C,CAArD,CAAkHF,IAAKC,CAAAA,KAAL,CAAWmP,CAAA,CAAYc,CAAZ,CAAwBE,CAAAA,cAAxB,EAAX,CAA/H,CACIC,EAAqD/N,IAAAA,EAAxC,GAAC8M,CAAA,CAAYc,CAAZ,CAAwBH,CAAAA,UAAzB,CAAqD/P,IAAKC,CAAAA,KAAL,CAAWmP,CAAA,CAAYc,CAAZ,CAAwBH,CAAAA,UAAW1P,CAAAA,QAA9C,CAArD,CAA+GL,IAAKC,CAAAA,KAAL,CAAWmP,CAAA,CAAYc,CAAZ,CAAwBI,CAAAA,WAAxB,EAAX,CADhI,CAEIvO,EAAI,CACNtB,mBAAoB0P,CADd,CAENzP,eAAgB2P,CAFV,CAGN1P,cAA2C4P,CAA1BJ,CAA0BI,CAAlBF,CAAkBE,CAAL,GAAKA,EAAAA,OAA5B,EAHT,CAINnR,eAAgB,SAJV,CAKNC,YAAsDiD,IAAAA,EAAxC,GAAC8M,CAAA,CAAYc,CAAZ,CAAwBH,CAAAA,UAAzB,CAAqDX,CAAA,CAAYc,CAAZ,CAAwBH,CAAAA,UAAWC,CAAAA,SAAUlD,CAAAA,KAAlG,CAA0GsC,CAAA,CAAYc,CAAZ,CAAwBD,CAAAA,YAAxB,EAAuCnD,CAAAA,KALzJ;AAMNtN,SAAmD8C,IAAAA,EAAxC,GAAC8M,CAAA,CAAYc,CAAZ,CAAwBH,CAAAA,UAAzB,CAAqDX,CAAA,CAAYc,CAAZ,CAAwBH,CAAAA,UAAWC,CAAAA,SAAUxQ,CAAAA,QAAlG,CAA6G4P,CAAA,CAAYc,CAAZ,CAAwBD,CAAAA,YAAxB,EAAuCzQ,CAAAA,QANzJ,CAONC,UAAoD6C,IAAAA,EAAxC,GAAC8M,CAAA,CAAYc,CAAZ,CAAwBH,CAAAA,UAAzB,CAAqDX,CAAA,CAAYc,CAAZ,CAAwBH,CAAAA,UAAWS,CAAAA,QAAxF,CAAmGpB,CAAA,CAAYc,CAAZ,CAAwBO,CAAAA,WAAxB,EAPzG,CASJ5T,EAAM6E,CAAAA,IAAV,EAAkB+N,EAAGiB,CAAAA,WAAYC,CAAAA,OAAjC,EAA+D,CAA/D,EAA4C5O,CAAEpB,CAAAA,aAA9C,EACErF,CAAA,CAAW,aAAX,CAA0ByG,CAA1B,CAEA,CADA6O,GACA,CADM,CACN,CAAItB,CAAJ,GACEC,CAAQjV,CAAAA,IAAR,CAAa,CAAC4V,CAAD,CAAa,QAAS,CAACW,CAAD,CAAQ,CACzC,IAAStV,CAAT,CAAa,CAAb,CAAgBA,CAAhB,EAAsB,GAAtB,CAA4B+T,CAA5B,CAAmD/T,CAAA,EAAnD,CACmC,CAAhC,GAAC,GAAD,CAAO+T,CAAP,EAAqC/T,CAArC,GAA2C,GAA3C,CAAiD+T,CAAjD,CAAyED,CAAA,CAAS9T,CAAT,CAAa,CAAb,CAAzE,CAA2F,CAAEwC,GAAImS,CAAN,CAAkBY,UAAW,EAA7B,CAAiCC,UAAW,CAAA,CAA5C,CAA3F,CAAgL,GAA9B,GAACzB,CAAD,CAAwB/T,CAAxB,CAAqC8T,CAAA,CAAS9T,CAAT,CAAa,CAAb,CAArC,CAAuD,CAAEwC,GAAImS,CAAN,CAAkBY,UAAWxB,CAAXwB,CAAkCvV,CAApD,CAAuDwV,UAAW,CAAA,CAAlE,CAAvD,CAAmI,EAExRC,YAAA,CAAY,QAAS,EAAG,CACtB,IAAIC,EAAkD3O,IAAAA,EAAxC,GAAC8M,CAAA,CAAYc,CAAZ,CAAwBH,CAAAA,UAAzB,CAAqD/P,IAAKC,CAAAA,KAAL,CAAWmP,CAAA,CAAYc,CAAZ,CAAwBH,CAAAA,UAAW7P,CAAAA,WAA9C,CAArD;AAAkHF,IAAKC,CAAAA,KAAL,CAAWmP,CAAA,CAAYc,CAAZ,CAAwBE,CAAAA,cAAxB,EAAX,CAAhI,CACIc,EAAsD5O,IAAAA,EAAxC,GAAC8M,CAAA,CAAYc,CAAZ,CAAwBH,CAAAA,UAAzB,CAAqD/P,IAAKC,CAAAA,KAAL,CAAWmP,CAAA,CAAYc,CAAZ,CAAwBH,CAAAA,UAAW1P,CAAAA,QAA9C,CAArD,CAA+GL,IAAKC,CAAAA,KAAL,CAAWmP,CAAA,CAAYc,CAAZ,CAAwBI,CAAAA,WAAxB,EAAX,CAC7Ha,EAAAA,CAAI,CACN1Q,mBAAoBwQ,CADd,CAENvQ,eAAgBwQ,CAFV,CAGNvQ,cAA6C4P,CAA5BU,CAA4BV,CAAnBW,CAAmBX,CAAL,GAAKA,EAAAA,OAA9B,EAHT,CAINnR,eAAgB,SAJV,CAKNC,YAAsDiD,IAAAA,EAAxC,GAAC8M,CAAA,CAAYc,CAAZ,CAAwBH,CAAAA,UAAzB,CAAqDX,CAAA,CAAYc,CAAZ,CAAwBH,CAAAA,UAAWC,CAAAA,SAAUlD,CAAAA,KAAlG,CAA0GsC,CAAA,CAAYc,CAAZ,CAAwBD,CAAAA,YAAxB,EAAuCnD,CAAAA,KALzJ,CAMNtN,SAAmD8C,IAAAA,EAAxC,GAAC8M,CAAA,CAAYc,CAAZ,CAAwBH,CAAAA,UAAzB,CAAqDX,CAAA,CAAYc,CAAZ,CAAwBH,CAAAA,UAAWC,CAAAA,SAAUxQ,CAAAA,QAAlG,CAA6G4P,CAAA,CAAYc,CAAZ,CAAwBD,CAAAA,YAAxB,EAAuCzQ,CAAAA,QANzJ,CAONC,UAAoD6C,IAAAA,EAAxC,GAAC8M,CAAA,CAAYc,CAAZ,CAAwBH,CAAAA,UAAzB,CAAqDX,CAAA,CAAYc,CAAZ,CAAwBH,CAAAA,UAAWS,CAAAA,QAAxF,CAAmGpB,CAAA,CAAYc,CAAZ,CAAwBO,CAAAA,WAAxB,EAPzG,CASJU;CAAExQ,CAAAA,aAAN,EAAuB0O,CAAA,CAASA,CAASvU,CAAAA,MAAlB,CAA2B,CAA3B,CAAvB,EAAwD8V,GAAxD,CAA8DvB,CAASvU,CAAAA,MAAvE,EACMqW,CAAExQ,CAAAA,aADR,EACyB0O,CAAA,CAASuB,GAAT,CAAcE,CAAAA,SADvC,EACoD,CAACzB,CAAA,CAASuB,GAAT,CAAcG,CAAAA,SADnE,EACgF1B,CAAA,CAASa,CAAT,CAAqBnS,CAAAA,EADrG,GAC4GmS,CAD5G,GAEIb,CAAA,CAASuB,GAAT,CAAcG,CAAAA,SAAmL,CAAvK,CAAA,CAAuK,CAAjKI,CAAExQ,CAAAA,aAA+J,CAA/I0O,CAAA,CAASuB,GAAT,CAAcE,CAAAA,SAAiI,CAAtHK,CAAE1Q,CAAAA,kBAAoH,CAA/FT,IAAKC,CAAAA,KAAL,CAAYkR,CAAEzQ,CAAAA,cAAd,CAA+B2O,CAASvU,CAAAA,MAAxC,EAAmD8V,GAAnD,CAAyD,CAAzD,EAA+F,CAAjCtV,CAAA,CAAW,gBAAX,CAA6B6V,CAA7B,CAAiC,CAAAP,GAAA,EAFrM,CAZsB,CAAxB,EAiB4CtO,IAAAA,EAAxC,GAAC8M,CAAA,CAAYc,CAAZ,CAAwBH,CAAAA,UAAzB,CAAqD/P,IAAKC,CAAAA,KAAL,CAAWmP,CAAA,CAAYc,CAAZ,CAAwBH,CAAAA,UAAW1P,CAAAA,QAA9C,CAArD,CAA+GL,IAAKC,CAAAA,KAAL,CAAWmP,CAAA,CAAYc,CAAZ,CAAwBI,CAAAA,WAAxB,EAAX,CAjBnH,EAiBwKjB,CAASvU,CAAAA,MAjBjL,CAJyC,CAA9B,CAAb,CAuBA,CAAAyU,CAAA,CAAQA,CAAQzU,CAAAA,MAAhB,CAAyB,CAAzB,CAAA,CAA4B,CAA5B,CAAA,CAA+BoV,CAA/B,CAxBF,CAHF,EA8BSrT,CAAM6E,CAAAA,IA9Bf,EA8BuB+N,EAAGiB,CAAAA,WAAYC,CAAAA,OA9BtC,EA8BiDrV,CAAA,CAAW,YAAX,CAAyByG,CAAzB,CAC7ClF,EAAM6E,CAAAA,IAAV,EAAkB+N,EAAGiB,CAAAA,WAAYU,CAAAA,KAAjC,EAA0C9V,CAAA,CAAW,gBAAX,CAA6ByG,CAA7B,CACtClF,EAAM6E,CAAAA,IAAV;AAAkB+N,EAAGiB,CAAAA,WAAYW,CAAAA,MAAjC,EAA2C/V,CAAA,CAAW,aAAX,CAA0ByG,CAA1B,CAlDzC,CAoDF,MAAOnD,CAAP,CAAc,EArDqB,CA+DvC0S,eAAA,CAAiBA,QAAS,CAAChU,CAAD,CAAI,CAAsF,IAAhFpC,CAAgF,CAA5EoC,CAAEzC,CAAAA,KAAF,CAAQ,+DAAR,CAA4E,GAAS,EAAT,EAAeK,CAAA,CAAE,CAAF,CAAKJ,CAAAA,MAApB,CAA4B,MAAOI,EAAA,CAAE,CAAF,CAAzH,CAK9BqW,UAAA,CAAYA,QAAS,CAACC,CAAD,CAAI,CAAMlU,CAAAA,CAAIkU,CAAE3W,CAAAA,KAAF,CAAQ,sIAAR,CAAiJ,OAAO,KAAP,EAAeyC,CAAf,EAA+B,CAA/B,CAAoBA,CAAExC,CAAAA,MAAjL,CAMzB2W,aAAA,CAAeA,QAAS,CAACvW,CAAD,CAAI,CAAE,MAAOA,EAAA,CAAIA,CAAEC,CAAAA,OAAF,CAAU,wDAAV,CAAsE,SAAtE,CAAkF0D,QAAS0H,CAAAA,QAASC,CAAAA,QAApG;AAA+G,IAA/G,CAAsH3H,QAAS0H,CAAAA,QAASmL,CAAAA,IAAxI,CAAJ,CAAmJC,KAAnJ,CAA2J,EAA3J,CAA+JC,MAA/J,CAAwK,CAAA,CAAxK,CAA4K,CAAC,CAA7K,EAAkL1W,CAAE2C,CAAAA,OAAF,CAAU,OAAV,CAAlL,GAAyM3C,CAAzM,CAA6MA,CAAEC,CAAAA,OAAF,CAAU,MAAV,CAAkB,OAAlB,CAA7M,EAA0O,CAAC,CAA3O,EAAgPD,CAAE2C,CAAAA,OAAF,CAAU,GAAV,CAAhP,GAAmQ8T,KAAnQ,CAA2Q,SAA3Q,EAAuR,CAAC,CAAxR,EAA6RzW,CAAE2C,CAAAA,OAAF,CAAU,aAAV,CAA7R,GAA0T8T,KAAA,EAAS,gBAAT,CAA2BC,MAA3B,CAAoC,CAAA,CAA9V,EAAmW,CAAC,CAApW,EAAyW1W,CAAE2C,CAAAA,OAAF,CAAU,QAAV,CAAzW,GAAiY8T,KAAA,EAAS,UAAT,CAAsB9S,QAAS0H,CAAAA,QAASC,CAAAA,QAAxC,CAAmD,IAAnD,CAA0D3H,QAAS0H,CAAAA,QAASmL,CAAAA,IAA5E,CAAkFE,MAAlF,CAA2F,CAAA,CAA5d,EAAie,CAAA,EAAKA,MAAL,CAAc1W,CAAd,CAAkByW,KAAlB,CAA0BzW,CAApgB,CAK5B2L,oBAAA,CAAsBA,QAAS,EAAG,CAGhC,IAFA,IAAIrJ,EAAI,CAAR,CACIqU,EAAahT,QAASwN,CAAAA,oBAAT,CAA8B,QAA9B,CADjB,CAESyF,EAAS,CAAlB,CAAqBA,CAArB,CAA8BD,CAAW/W,CAAAA,MAAzC,CAAiDgX,CAAA,EAAjD,CAA2D,CAEzD,IAAIC,EADQF,CAAAG,CAAWF,CAAXE,CACSrI,CAAAA,GACjB4H,UAAA,CAAUQ,CAAV,CAAJ,GACEF,CAAA,CAAWC,CAAX,CAAmBnI,CAAAA,GAInB,CAJyB8H,YAAA,CAAaM,CAAb,CAIzB,CAHIE,CAGJ,CAHgBX,cAAA,CAAeS,CAAf,CAGhB;AAFA5C,CAAA,CAAW3R,CAAX,CAEA,CAFgByU,CAEhB,CADAJ,CAAA,CAAWC,CAAX,CAAmBrQ,CAAAA,YAAnB,CAAgC,IAAhC,CAAsCwQ,CAAtC,CACA,CAAAzU,CAAA,EALF,CAHyD,CAH3B,CA/Hf,CA4pBrBuJ,CAAA,EAAA,GAA4BlI,QAASC,CAAAA,gBAAT,CAA4BD,QAASC,CAAAA,gBAAT,CAA0B,kBAA1B,CAA8C4H,CAA9C,CAA5B,CAA4F7H,QAASE,CAAAA,WAArG,EAAoHF,QAASE,CAAAA,WAAT,CAAqB,oBAArB,CAA2CgI,CAA3C,CAAhJ,CA34CW,CAAZ,CAAD;", 6 | "sources":["Universal-Federated-Analytics.js"], 7 | "names":["gtag","dataLayer","push","arguments","_cleanBooleanParam","a","toString","toLowerCase","_isValidGA4Num","match","length","oCONFIG","GWT_GA4ID","_cleanGA4Value","t","replace","d_c","c","_sendEvent","b","send_to","g","GA4_NAME","er","_piiRedactor","_objToQuery","_queryToJSON","_unflattenJSON","event_name_dimension","_sendViewSearchResult","isSearch","_initAutoTracker","_isDownload","ex","href","split","hostname","ext","RegExp","EXTS","_eventHandler","event","type","keyCode","target","nodeName","closest","COOKIE_DOMAIN","d","f","e","h","i","l","test","k","SUBDOMAIN_BASED","indexOf","link_id","id","link_url","link_domain","link_text","text","trim","link_classes","className","interaction_type","pathname","file_name","file_extension","outbound","error","document","addEventListener","attachEvent","_initHTMLVideoTracker","eventHandler","media_type","mObj","video_provider","video_title","decodeURIComponent","currentSrc","video_id","video_url","audio_provider","audio_title","audio_id","audio_url","media_status","current","Math","round","currentTime","percentage","floor","duration","j","_progress_milestones","latest_milestone","video_current_time","video_duration","video_percent","audio_current_time","audio_duration","audio_percent","e_n","_milestone","progress_point","YT_MILESTONE","htmlMedia","querySelectorAll","mediaTagId","getAttribute","random","slice","setAttribute","data","Object","Array","isArray","result","p","cur","prop","last","idx","temp","substring","undefined","isNaN","parseInt","_flattenJSON","recurse","isEmpty","obj","keys","reduce","str","key","delimiter","encodeURIComponent","val","join","qs","pairs","forEach","pair","value","Number","prototype","call","JSON","parse","stringify","_piiRegexReset","name","regex","payload","piiRegex","_allowedQs","_allowedQuerystrings","_hitPayloadParts","newQueryString","_param","_para","splice","_val","_urlPatt","ho","checkParams","paramArray","paramSubArray","pa","concat","ix","format","UncheckParams","pii","_initBannerTracker","acord","querySelector","gas4","textContent","section","_URIHandler","SEARCH_PARAMS","_scrubbedURL","z","escape","RegExp.escape","s","o","n","location","protocol","r","_setUpTrackers","AUTOTRACKER","YOUTUBE","_initYouTubeTracker","HTMLVIDEO","_setUpTrackersIfReady","readyState","FORCE_SSL","ANONYMIZE_IP","AGENCY","SUB_AGENCY","VERSION","SITE_TOPIC","SITE_PLATFORM","SCRIPT_SOURCE","URL_PROTOCOL","USE_MAIN_CUSTOM_DIMENSIONS","MAIN_AGENCY_DIMENSION","MAIN_SUBAGENCY_DIMENSION","MAIN_CODEVERSION_DIMENSION","MAIN_SITE_TOPIC_DIMENSION","MAIN_SITE_PLATFORM_DIMENSION","MAIN_SCRIPT_SOURCE_URL_DIMENSION","MAIN_URL_PROTOCOL_DIMENSION","MAIN_INTERACTION_TYPE_DIMENSION","MAIN_USING_PARALLEL_DIMENSION","MAIN_HOSTNAME_DIMENSION","USE_PARALLEL_CUSTOM_DIMENSIONS","PARALLEL_AGENCY_DIMENSION","PARALLEL_SUBAGENCY_DIMENSION","PARALLEL_CODEVERSION_DIMENSION","PARALLEL_SITE_TOPIC_DIMENSION","PARALLEL_SITE_PLATFORM_DIMENSION","PARALLEL_SCRIPT_SOURCE_URL_DIMENSION","PARALLEL_URL_PROTOCOL_DIMENSION","PARALLEL_INTERACTION_TYPE_DIMENSION","PARALLEL_USING_PARALLEL_DIMENSION","PARALLEL_HOSTNAME_DIMENSION","COOKIE_TIMEOUT","WEBVITALS","USE_CUSTOM_URL","USE_CUSTOM_TITLE","USING_PARALLEL_TRACKER","ACTIVATE_DEV","HOSTNAME","_updateConfig","_fedParmsGTM","getElementById","_fullParams","src","_keyValuePair","_key","_value","toUpperCase","_initWebvitals","WVscript","createElement","onload","WVscript.onload","webVitals","onCLS","sendToGoogleAnalytics","onFID","onLCP","onFCP","onTTFB","onINP","head","appendChild","delta","rating","attribution","metric_id","metric_value","metric_delta","metric_rating","debug_target","debugTarget","largestShiftTarget","element","eventTarget","debug_event_type","eventType","debug_timing","loadState","event_time","largestShiftTime","lcpEntry","startTime","eventTime","dap_head","getElementsByTagName","item","GA4Object","window","Date","gas","window.gas","page_location","page_title","title","search_term","event_category","event_action","event_label","event_value","non_interaction","window.gas4","ur","_payloadInterceptor","_isRedacted","pl","navigator","sendBeacon","ga4_props","window.navigator.sendBeacon","endpoint","query","events","apply","_setAllowedQS","queries","default","createTracker","m","custom_dap_data","url","search","referrer","groups","cookie_expires","page_referrer","rr","tag","firstScriptTag","parentNode","insertBefore","videoArray","playerArray","_buckets","_milestoneController","ytUtils","onYouTubeIframeAPIReady","YT","Player","onPlayerReady","onPlayerStateChange","onPlayerError","videotitle","playerInfo","videoData","getVideoData","videoIndex","cTime","getCurrentTime","vDuration","getDuration","toFixed","videoUrl","getVideoUrl","PlayerState","PLAYING","cCi","videx","milestone","triggered","setInterval","cTimeP","vDurationP","y","ENDED","PAUSED","youtube_parser","IsYouTube","u","YTUrlHandler","host","stAdd","adFlag","allIframes","iframe","_thisSrc","video","youtubeid"] 8 | } 9 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Digital Analytics Program (DAP) - a Federal Government-wide Analytics Solution 2 | 3 | DAP provides a JavaScript file for US federal agencies to link or embed in their website(s) to participate in the Digital Analytics Program. Participating agencies are granted access to the reporting portal with real-time and historical summary and detailed-level data by GSA's DAP team. DAP top-level summary real-time and historical data are also reported publicly on https://analytics.usa.gov/ 4 | 5 | ### DAP Participation is a Requirement 6 | 7 | On September 22, 2023, the Office of Management and Budget (OMB) released a memorandum on ["Delivering a Digital-First Public Experience"](https://www.whitehouse.gov/wp-content/uploads/2023/09/M-23-22-Delivering-a-Digital-First-Public-Experience.pdf), which requires federal agencies to implement the DAP javascript code on all public-facing federal websites. The requirement was originally introduced on November 8, 2016, in the OMB memorandum M-17-06 "Policies for Federal Agency Public Websites and Digital Services." 8 | 9 | ### DAP Code 10 | 11 | DAP offers a central hosting server for its minified JavaScript file at `https://dap.digitalgov.gov/Universal-Federated-Analytics-Min.js`. As of August 2018, the file is gzipped and served compressed by default, but will be served uncompressed where `Accept-Encoding: gzip` is not present in the viewer. 12 | 13 | The latest version 8.6 of DAP GA code contains GA4 tracking only. DAP UA data collection and reporting was removed on June 24, 2024 as part of the global sunset of Universal Analytics on July 1, 2024. 14 | 15 | * [`Universal-Federated-Analytics.js`](Universal-Federated-Analytics.js) (full) 16 | * [`Universal-Federated-Analytics-Min.js`](Universal-Federated-Analytics-Min.js) (minified) 17 | * [`Federated.js.map`](Federated.js.map) (source map) 18 | 19 | ### DAP Code Implementation 20 | 21 | Agencies should use the following HTML snippet to participate in the Digital Analytics Program. Note: replace `AGENCY` with their agency's standard acronym (e.g. DHS, EPA, GSA, DOC etc.) 22 | 23 | ``` 24 | 25 | 26 | ``` 27 | 28 | ### DAP Documentation and Resources 29 | 30 | For more details about the DAP script capabilities, steps for adding DAP code to your website (including implementing with a tag manager), using custom parameters, DAP training etc., please refer to: 31 | * [DAP GA4 Release Notes](https://github.com/digital-analytics-program/gov-wide-code/wiki/DAP-Release-Notes) 32 | * [DAP GA4 Technical Quick Guide](https://github.com/digital-analytics-program/gov-wide-code/wiki/DAP-Quick-Technical-Guide) 33 | * [DAP GA4 Tracking Capabilities Summary](https://github.com/digital-analytics-program/gov-wide-code/wiki/DAP-Code-Capabilities-Summary) 34 | * [DAP GA4 Custom Events Implementation Example](https://github.com/digital-analytics-program/gov-wide-code/wiki/DAP-Custom-Event-Tracking) 35 | * [DAP Wiki: a one-stop place for DAP technical instructions and training resources](https://github.com/digital-analytics-program/gov-wide-code/wiki) 36 | * [Digital.gov Guide to the Digital Analytics Program](https://digital.gov/guide/dap/add-your-site-dap/#participating-in-the-program) 37 | 38 | #### Known implementation limitations 39 | 40 | The Federated DAP code is designed to work on all government sites, whether they 41 | already have inline, site-specific/independent GA tracking or not. Specific 42 | supported scenarios include: 43 | 44 | * GA4 Site Specific before the Federated code (Default Tracking Object) 45 | * GA4 Site Specific after the Federated code (Default Tracking Object) 46 | * GA4 Site Specific before the Federated code (Custom Tracking Object) 47 | * GA4 Site Specific after the Federated code (Custom Tracking Object) 48 | * Classic GA Site Specific before the Federated code 49 | * Classic GA Site Specific after the Federated code 50 | 51 | *Limitation:* There is one scenario where the Federated DAP 52 | Analytics code fails: when an agency Universal Analytics tracking code (not DAP) 53 | uses a custom/non-default tracking object and it is added right after the Federated 54 | code. In this specific scenario, the Federated code will fail in reporting the first page 55 | hit and will be able to track normally all the consecutive hits. 56 | 57 | #### Browser support 58 | 59 | The DAP code is compatible with a [broad range of browsers](.browserslistrc) supported by the [Google Tag Manager (GTM)}](https://developers.google.com/tag-platform/support/supported-browsers). NOTE: As of July 2024, [GTM and DAP no longer support Internet Explorer](https://support.google.com/tagmanager/answer/4620708#july2nd). On browsers not supported by DAP, user sessions to websites may not be recorded. 60 | 61 | #### Transport security 62 | 63 | The centrally hosted DAP JS is **only available over HTTPS**. Agencies should use only `https://` URLs, not protocol-relative URLs. 64 | 65 | Additionally, an [HTTP Strict Transport Security](https://https.cio.gov/hsts/) header is set with a length of 1 year, and is prepared for preloading into major web browsers. As of this writing, that header looks like this: 66 | 67 | ``` 68 | Strict-Transport-Security: max-age=31536000;preload 69 | ``` 70 | 71 | Browsers that support HSTS and which have observed this HSTS policy (either from a prior visit or through HSTS preloading) will not issue HTTP requests to `dap.digitalgov.gov` at all, even if instructed. 72 | 73 | Together, HTTPS and HSTS offer a strong, necessary level of transport security and integrity. 74 | 75 | #### Content Security Policy 76 | 77 | A Content Security Policy (CSP) is an added layer of security that helps to detect and mitigate certain types of attacks to your website, including Cross-Site Scripting (XSS) and data injection attacks. In order to incorporate the DAP JS into your site which includes a Content Security Policy, add the DAP domain and necessary Google domains to your allowed script sources. Also add the Google Analytics domain to your allowed connect sources. Example follows: 78 | 79 | ``` 80 | Content-Security-Policy: script-src https://dap.digitalgov.gov https://www.google-analytics.com https://www.googletagmanager.com; connect-src https://www.google-analytics.com; 81 | ``` 82 | 83 | This whitelists the DAP domain and necessary Google domains as trusted sources for JavaScript downloads to your site. In order to make your CSP as restrictive and secure as possible, use `script-src` rather than `default-src` to only permit JavaScript to be included from these domains and no other file types. The `connect-src` directive allows the DAP JavaScript code to connect to the Google Analytics domain in order to send analytics data from your site to Google Analytics. 84 | 85 | #### Data integrity 86 | 87 | The `dap.digitalgov.gov` domain is currently served by a third party content delivery network (CDN) that serves the current JavaScript referenced in the `master` branch of this GitHub repository. 88 | 89 | Before any change of the JavaScript being served by the CDN, the owners of this repository will update the file located in the `master` branch of the repo. 90 | 91 | This means that, barring the compromise of GitHub's systems or the CDN's systems, all changes to the code that appears on `dap.digitalgov.gov` should be publicly reflected in [this repository's commit history](https://github.com/digital-analytics-program/gov-wide-code/commits/master). 92 | 93 | #### Appropriate Placement 94 | 95 | The Digital Analytics Program Javascript code must be applied to public-facing websites. Public-facing websites are defined as websites whose primary intended users are not Federal government employees or contractors. 96 | 97 | #### Authenticated or "Priviledged" Pages 98 | 99 | Agencies are expected to add DAP code to sign-in pages that serve as the entry point to authenticated content on public-facing sites. Implementation of the DAP code beyond this entry point on authenticated pages is permitted on a case-by-case basis only, with DAP's approval and testing as a prerequisite. 100 | 101 | This decision tree may help: 102 | 103 | ![Decision Tree](/documentation/DAP%20Code%20Placement%20Decision%20Tree%20(2).png) 104 | 105 | #### Access controls 106 | 107 | This repository is maintained in its own GitHub organization, `digital-analytics-program`, and is operated by the Digital Analytics Program team. 108 | 109 | Only Digital Analytics Program staff have been granted write access to this repository. 110 | 111 | ### Local development 112 | 113 | #### Prerequisites 114 | 115 | * NodeJS > v20.x 116 | * Docker 117 | 118 | #### Install dependencies 119 | 120 | ```bash 121 | npm install 122 | ``` 123 | 124 | #### Linting 125 | 126 | This repo uses Eslint for code static analysis. Run the linter with: 127 | 128 | ```bash 129 | npm run lint 130 | ``` 131 | 132 | #### Run integration tests 133 | 134 | Start up the test site at http://localhost:8080/ with one of the following: 135 | 136 | ```bash 137 | # Using the local version of the DAP code 138 | npm run test-site-dev 139 | 140 | # Using the staging environment version of the DAP code 141 | npm run test-site-stg 142 | 143 | # Using the production environment version of the DAP code 144 | npm run test-site-prd 145 | ``` 146 | 147 | Then run the tests against the test site: 148 | 149 | ```bash 150 | npm run cucumber 151 | ``` 152 | 153 | See more details in the [testing docs](features/README.md). 154 | 155 | **All members of the digital-analytics-program GitHub organization are required to have two-factor authentication enabled.** 156 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | Services operated by the U.S. General Services Administration (GSA) 4 | are covered by the **GSA Vulnerability Disclosure Policy**. See the [policy page](https://gsa.gov/vulnerability-disclosure-policy) for details including: 5 | 6 | * GSA's coordinated disclosure policy. 7 | * Information on how you may conduct security research on GSA developed 8 | software and systems. 9 | * Important legal and policy guidance. 10 | 11 | ## Reporting a Vulnerability 12 | 13 | Security issues should be reported via GitHub [private vulnerability reporting](https://docs.github.com/en/code-security/security-advisories/guidance-on-reporting-and-writing-information-about-vulnerabilities/privately-reporting-a-security-vulnerability#privately-reporting-a-security-vulnerability) (requires a GitHub account) or by sending an email to . 14 | 15 | Security issues may also be reported to the GSA Vulnerability Disclosure Program, following instructions in the policy linked above. However, we ask that you report directly to us as well, to ensure that the issue will be reviewed quickly. 16 | 17 | ## Supported Versions 18 | 19 | Please note that only the most recent major version of the DAP code is supported with security updates. 20 | 21 | | Version | Supported | 22 | |-------| ------------------ | 23 | | 8.x | :white_check_mark: | 24 | | < 8.0 | :x: | 25 | 26 | When using this code or reporting vulnerabilities, please only use supported 27 | versions. -------------------------------------------------------------------------------- /Universal-Federated-Analytics-Min.js: -------------------------------------------------------------------------------- 1 | (function(){function E(){dataLayer.push(arguments)}function v(a){switch(a.toString().toLowerCase()){case "true":case "on":case "yes":case "1":return!0;case "false":case "off":case "no":case "0":return!1;default:return a}}function M(a){a=a.toLowerCase();a=a.match(/^g\-([0-9a-z])+$/);return null!==a&&0=q&&q>c[f.target.id].latest_milestone&&(c[f.target.id].latest_milestone=q);c[f.target.id].latest_milestone&&!c[f.target.id]._progress_milestones[c[f.target.id].latest_milestone]&&(c[f.target.id]._progress_milestones[c[f.target.id].latest_milestone]=!0,"video"===l?(k.video_current_time=c[f.target.id].current,k.video_duration=Math.round(f.target.duration),k.video_percent=c[f.target.id].latest_milestone): 10 | (k.audio_current_time=c[f.target.id].current,k.audio_duration=Math.round(f.target.duration),k.audio_percent=c[f.target.id].latest_milestone),r(l+"_progress",k));break;case "play":"video"===l?(k.video_current_time=c[f.target.id].current,k.video_duration=Math.round(f.target.duration),k.video_percent=c[f.target.id].latest_milestone):(k.audio_current_time=c[f.target.id].current,k.audio_duration=Math.round(f.target.duration),k.audio_percent=c[f.target.id].latest_milestone);r(0===c[f.target.id].current? 11 | l+"_start":l+"_play",k);break;case "pause":c[f.target.id].current!==Math.round(f.target.duration)&&("video"===l?(k.video_current_time=c[f.target.id].current,k.video_duration=Math.round(f.target.duration),k.video_percent=c[f.target.id].latest_milestone):(k.audio_current_time=c[f.target.id].current,k.audio_duration=Math.round(f.target.duration),k.audio_percent=c[f.target.id].latest_milestone),r(l+"_pause",k));break;case "ended":for("video"===l?(k.video_current_time=c[f.target.id].current,k.video_duration= 12 | Math.round(f.target.duration),k.video_percent="100"):(k.audio_current_time=c[f.target.id].current,k.audio_duration=Math.round(f.target.duration),k.audio_percent="100"),r(l+"_complete",k),c[f.target.id].current=0,c[f.target.id].latest_milestone=0,l=1;l<=100/b;l++)4===100/b&&l===100/b?c[f.target.id].progress_point=95:100!==b*l?c[f.target.id].progress_point=b*l:"",c[f.target.id]._progress_milestones[c[f.target.id].progress_point]=!1}}for(var b=d.YT_MILESTONE,c={},e=document.querySelectorAll("video,audio"), 13 | h=0;h=u[cCi].milestone&&!u[cCi].triggered&&u[b].id===b&&(u[cCi].triggered=!0,l.video_percent=u[cCi].milestone,l.video_current_time=Math.round(l.video_duration/u.length*(cCi+1)),r("video_progress",l),cCi++)},(void 0!==p[b].playerInfo?Math.round(p[b].playerInfo.duration):Math.round(p[b].getDuration()))/u.length)}]),L[L.length-1][1](b))):a.data==YT.PlayerState.PLAYING&&r("video_play",g);a.data==YT.PlayerState.ENDED&&r("video_complete",g);a.data== 54 | YT.PlayerState.PAUSED&&r("video_pause",g)}catch(f){}};youtube_parser=function(a){if((a=a.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&\?]*).*/))&&11==a[2].length)return a[2]};IsYouTube=function(a){a=a.match(/(.*)(youtu\.be\/|youtube(\-nocookie)?\.([A-Za-z]{2,4}|[A-Za-z]{2,3}\.[A-Za-z]{2})\/)(watch|embed\/|vi?\/)?(\?vi?=)?([^#&\?\/]{11}).*/);return null!=a&&0 tags, without having to make 25 | special allowances for Google Analytics hostnames. If users would like to change 26 | the transport mechanism of DAP to image or beacon, they can do so using a new 27 | supported parameter. Special thanks to the Login.gov team and Eric Mill for 28 | raising this request and providing additional context. 29 | 30 | ## Known Issues 31 | 32 | ### Issue #1: The Federated code is designed to work on all government sites whether they 33 | already have inline site specific GA trackers or not. There is only one scenario that is not 34 | fully supported by the Federated code, which is when a Universal Analytics tracking 35 | code (that is using a custom/non-default tracking object) is added right after the 36 | Federated code. In this specific scenario the Federated code will fail in reporting the first 37 | page hit and will be able to track normally all the consecutive hits. 38 | Supported Scenarios: 39 | * UA Site Specific before the Federated code (Default Tracking Object) 40 | * UA Site Specific after the Federated code (Default Tracking Object) 41 | * UA Site Specific before the Federated code (Custom Tracking Object) 42 | * Classic GA Site Specific before the Federated code 43 | * Classic GA Site Specific after the Federated code 44 | 45 | ### Issue #2: The Federated tracking code doesn’t fully support the older versions of 46 | Microsoft Internet Explorer. While the Federated tracking code works with all known 47 | browsers, some features (e.g. the YouTube tracker) may not work properly on IE 8 and 48 | earlier versions because of YouTube API limitations. 49 | -------------------------------------------------------------------------------- /cucumber.yml: -------------------------------------------------------------------------------- 1 | default: 2 | forceExit: true 3 | order: random 4 | strict: true 5 | -------------------------------------------------------------------------------- /documentation/Certified_Analyst_Exam_PDF.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digital-analytics-program/gov-wide-code/1817f8a53949c98953ec6b6015135c686805c99d/documentation/Certified_Analyst_Exam_PDF.pdf -------------------------------------------------------------------------------- /documentation/Certified_Analyst_Study_Guide.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digital-analytics-program/gov-wide-code/1817f8a53949c98953ec6b6015135c686805c99d/documentation/Certified_Analyst_Study_Guide.pdf -------------------------------------------------------------------------------- /documentation/Copy of DAP Decision Tree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digital-analytics-program/gov-wide-code/1817f8a53949c98953ec6b6015135c686805c99d/documentation/Copy of DAP Decision Tree.png -------------------------------------------------------------------------------- /documentation/DAP Code Placement Decision Tree (1).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digital-analytics-program/gov-wide-code/1817f8a53949c98953ec6b6015135c686805c99d/documentation/DAP Code Placement Decision Tree (1).png -------------------------------------------------------------------------------- /documentation/DAP Code Placement Decision Tree (2).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digital-analytics-program/gov-wide-code/1817f8a53949c98953ec6b6015135c686805c99d/documentation/DAP Code Placement Decision Tree (2).png -------------------------------------------------------------------------------- /documentation/DAP Code Placement Decision Tree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digital-analytics-program/gov-wide-code/1817f8a53949c98953ec6b6015135c686805c99d/documentation/DAP Code Placement Decision Tree.png -------------------------------------------------------------------------------- /documentation/DAP Decision Tree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digital-analytics-program/gov-wide-code/1817f8a53949c98953ec6b6015135c686805c99d/documentation/DAP Decision Tree.png -------------------------------------------------------------------------------- /documentation/DAP-Criteria.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digital-analytics-program/gov-wide-code/1817f8a53949c98953ec6b6015135c686805c99d/documentation/DAP-Criteria.png -------------------------------------------------------------------------------- /documentation/DAP-critera.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digital-analytics-program/gov-wide-code/1817f8a53949c98953ec6b6015135c686805c99d/documentation/DAP-critera.png -------------------------------------------------------------------------------- /documentation/DAP_Custom_Events (1).pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digital-analytics-program/gov-wide-code/1817f8a53949c98953ec6b6015135c686805c99d/documentation/DAP_Custom_Events (1).pdf -------------------------------------------------------------------------------- /documentation/DAP_GA4_Video2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digital-analytics-program/gov-wide-code/1817f8a53949c98953ec6b6015135c686805c99d/documentation/DAP_GA4_Video2.pdf -------------------------------------------------------------------------------- /documentation/DAP_GA4_Video3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digital-analytics-program/gov-wide-code/1817f8a53949c98953ec6b6015135c686805c99d/documentation/DAP_GA4_Video3.pdf -------------------------------------------------------------------------------- /documentation/DAP_Video1_GA4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digital-analytics-program/gov-wide-code/1817f8a53949c98953ec6b6015135c686805c99d/documentation/DAP_Video1_GA4.pdf -------------------------------------------------------------------------------- /documentation/GSA DAP 4.0 - DAP Code Capabilities Summary and Reference.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digital-analytics-program/gov-wide-code/1817f8a53949c98953ec6b6015135c686805c99d/documentation/GSA DAP 4.0 - DAP Code Capabilities Summary and Reference.pdf -------------------------------------------------------------------------------- /documentation/GSA DAP 4.0 - Quick Guide.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digital-analytics-program/gov-wide-code/1817f8a53949c98953ec6b6015135c686805c99d/documentation/GSA DAP 4.0 - Quick Guide.pdf -------------------------------------------------------------------------------- /documentation/GSA DAP 4.0 - Release Notes.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digital-analytics-program/gov-wide-code/1817f8a53949c98953ec6b6015135c686805c99d/documentation/GSA DAP 4.0 - Release Notes.pdf -------------------------------------------------------------------------------- /documentation/GSA DAP 4.1 - DAP Code Capabilities Summary and Reference.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digital-analytics-program/gov-wide-code/1817f8a53949c98953ec6b6015135c686805c99d/documentation/GSA DAP 4.1 - DAP Code Capabilities Summary and Reference.pdf -------------------------------------------------------------------------------- /documentation/GSA DAP 4.1 - Quick Guide.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digital-analytics-program/gov-wide-code/1817f8a53949c98953ec6b6015135c686805c99d/documentation/GSA DAP 4.1 - Quick Guide.pdf -------------------------------------------------------------------------------- /documentation/GSA DAP 4.1 - Release Notes.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digital-analytics-program/gov-wide-code/1817f8a53949c98953ec6b6015135c686805c99d/documentation/GSA DAP 4.1 - Release Notes.pdf -------------------------------------------------------------------------------- /documentation/GSA DAP 6.8 - Release Notes.docx.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digital-analytics-program/gov-wide-code/1817f8a53949c98953ec6b6015135c686805c99d/documentation/GSA DAP 6.8 - Release Notes.docx.pdf -------------------------------------------------------------------------------- /documentation/GSA DAP 6.9 - DAP Code Capabilities Summary and Reference.docx.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digital-analytics-program/gov-wide-code/1817f8a53949c98953ec6b6015135c686805c99d/documentation/GSA DAP 6.9 - DAP Code Capabilities Summary and Reference.docx.pdf -------------------------------------------------------------------------------- /documentation/GSA DAP 6.9 - Release Notes.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digital-analytics-program/gov-wide-code/1817f8a53949c98953ec6b6015135c686805c99d/documentation/GSA DAP 6.9 - Release Notes.pdf -------------------------------------------------------------------------------- /documentation/GSA DAP 6.9 Quick Guide.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digital-analytics-program/gov-wide-code/1817f8a53949c98953ec6b6015135c686805c99d/documentation/GSA DAP 6.9 Quick Guide.pdf -------------------------------------------------------------------------------- /documentation/GSA DAP 7.0 - DAP Code Capabilities Summary and Reference.docx.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digital-analytics-program/gov-wide-code/1817f8a53949c98953ec6b6015135c686805c99d/documentation/GSA DAP 7.0 - DAP Code Capabilities Summary and Reference.docx.pdf -------------------------------------------------------------------------------- /documentation/GSA DAP 7.0 - Quick Guide.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digital-analytics-program/gov-wide-code/1817f8a53949c98953ec6b6015135c686805c99d/documentation/GSA DAP 7.0 - Quick Guide.pdf -------------------------------------------------------------------------------- /documentation/GSA DAP 7.0 - Release Notes.docx.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digital-analytics-program/gov-wide-code/1817f8a53949c98953ec6b6015135c686805c99d/documentation/GSA DAP 7.0 - Release Notes.docx.pdf -------------------------------------------------------------------------------- /documentation/GSA DAP Current - Quick Guide.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digital-analytics-program/gov-wide-code/1817f8a53949c98953ec6b6015135c686805c99d/documentation/GSA DAP Current - Quick Guide.pdf -------------------------------------------------------------------------------- /documentation/architecture-decision-records/001-support-pinned-deployment.md: -------------------------------------------------------------------------------- 1 | # 1. Publish DAP as an NPM package and encourage more self-hosting 2 | 3 | ## Status 4 | 5 | Proposed 6 | 7 | ## Context 8 | 9 | When the DAP code was first released in 2013, the only way to include it on a site was to manually copy the JS file from the DAP Git repo to the site's own hosting infrastructure. In 2015, the DAP team [started hosting](https://digital.gov/2015/08/14/secure-central-hosting-for-the-digital-analytics-program/) the DAP script on a team-managed CDN and, since then, we have encouraged users to load DAP from this centrally hosted location. We've always acknowledged that self-hosting is still an option, but the documentation "strongly recommends" that users adopt the centrally hosted approach "to allow the DAP team to seamlessly push the latest versions of the DAP code to agencies". Currently, 17% of DAP-enabled websites self-host the DAP code - notably, the ones who self-host arguably are the most security conscious of our users (most .mil sites, for instance). 10 | 11 | Because DAP is required to be installed on every public-facing, non-authenticated federal website, a compromise of the CDN hosting the DAP code would have wide-ranging security effects. Since the DAP team is responsible for managing that CDN, we would no doubt be held at least partly responsible for such a compromise. Since around 2018, browsers have universally supported a technology called [subresource integrity](https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity), which can detect when a file downloaded from a CDN has been altered from its original published state and block the file from loading. Recently, the DAP team has received inquiries about SRI support from several of our customers. Unfortunately, given current technology, the only way to take advantage of SRI's guarantees is to pin your site to a specific version of the third-party library that you are including. This places the user back facing the same tradeoff that they face with self-hosting - if you pin your site to a specific version of DAP, then you can be assured of the code's integrity, but you no longer automatically receive security fixes. Former leaders of the DAP team have acknowledged this trade-off but have emphasized the difficulty in getting the thousands of DAP-enabled websites to update their DAP dependencies on a regular basis, which has lead them to favor the centrally-hosted approach. 12 | 13 | This ADR proposes that we re-examine this security trade-off (code integrity vs. automated security updates) and recommends that we start to give more weight to the code integrity risk. This recommendation reflects a change in circumstances since the original decision was made in 2015: 14 | 1. New tools for semi-automatically managing dependency updates have been introduced and become popular since 2015 (exp., Dependabot, acquired by GitHub in 2019) and, for teams who are willing to integrate such tools, dependency rot is not inevitable. 15 | 2. Of the 40 releases since 2015, only X% have included security updates. DAP is a small codebase with no external dependencies - it's not overly hubristic to think that we could mostly avoid releasing versions containing security flaws. 16 | 17 | ## Decision 18 | 19 | We will: 20 | 1. Publish the DAP library as an NPM package, providing a way to "self-host" that can be managed by automated dependency management tools like Dependabot. 21 | 2. Continue to offer the DAP library as a dynamic download on our CDN, because not to do so would break many, many sites. 22 | 3. Update our documentation to describe the tradeoffs of each deployment option instead of pushing a single recommendation for the centrally-hosted option: \ 23 | Does your project use NPM and does your team have processes in place to keep dependencies up-to-date? Consider self-hosting. Otherwise, load DAP from our CDN. 24 | 25 | ### Other Options Considered 26 | 27 | As mentioned above, Subresource Integrity (SRI) is an alternative strategy for guaranteeing code integrity and one that some of our users have asked about. To support SRI, we would need to add versioned URL's in our CDN and publish an integrity hash with each release. Then the user's site would load DAP with a tag like: 28 | ```` 29 | 37 | ```` 38 | 39 | Invicti, the web application vulnerability scanner that is most commonly used at GSA, tends to recommend Subresource Integrity whenever it finds the DAP code being loaded from our CDN. For that reason, we tend to get requests for SRI from GSA folks. But, if you don't trust our CDN, self-hosting is a better solution than SRI. The only benefits of using our CDN over self-hosting DAP are: 40 | 1. You automatically get the most current version of DAP. 41 | 2. It's a bit easier to code. 42 | 43 | But: 44 | 1. As explained above, any reasonable implementation of SRI requires version pinning and thus negates benefit (1). Additionally, a version-pinned script tag is actually harder to keep up-to-date than is an NPM dependency because Dependabot and similar tools aren't built to manage version numbers in the URL of script tags. 45 | 2. For a site that's currently loading DAP from the CDN, updating the DAP snippet to add a versioned SRI hash ___is___ easier than adopting self-hosting. But a team that lacks the engineering resources to implement self-hosting probably lacks the resources to keep dependencies up-to-date too, and a site pinned with an SRI hash to a many versions out-of-date instance of DAP is more of a security risk than our CDN is. 46 | 47 | Besides, self-hosting your dependencies has other benefits over loading them from a CDN, with or without SRI: 48 | 1. You can security scan the dependencies as part of your own site's build process. 49 | 2. You're not affected by reliability problems with the CDN. 50 | 3. You control how the dependency is bundled and compressed. Tree shaking becomes possible. Loading performance is likely to be improved. 51 | 4. Not particularly relevant in the DAP case but, in the general case, loading from a CDN leaks information about your users' behaviors to the CDN. 52 | 53 | Overall, Subresource Integrity is a strictly worse solution to the untrusted third-party CDN problem than is self-hosting. We should respond to requests about SRI with a recommendation to self-host if security is a concern. 54 | 55 | See additional discussion of SRI [here](https://github.com/digital-analytics-program/gov-wide-code/issues/152). 56 | 57 | ## Consequences 58 | 59 | The expected consequence of this change is that more sites will start self-hosting DAP and thus more sites will be using older versions of DAP. 60 | 61 | The benefit is that, with more teams using pinned, verified versions of DAP, we will have a better security story to tell in case the DAP CDN is ever compromised. The more security-conscious of our users will be pleased that we've made it easier for them to self-host. 62 | 63 | The downside includes all of the reasons we've encouraged sites to use the dynamic centrally-hosted version - self-hosted installations don't automatically receive new features and fixes (including security fixes). We will need to think more carefully about our support for our "self-hosted" users: 64 | - Do everything we can to ensure that DAP users are notified of new releases 65 | - Publish GitHub releases that users can subscribe to be notified about 66 | - Packaging for npm means that users can use Dependabot to manage updates 67 | - Release new features in batches so that users don't have update constantly to get new features 68 | - Test releases thoroughly so that users don't have to update to fix versions very often 69 | - Think carefully about backwards compatibility when planning releases 70 | - Take SemVer and release notes seriously -------------------------------------------------------------------------------- /documentation/architecture-decision-records/template.md: -------------------------------------------------------------------------------- 1 | # #. Title 2 | 3 | This is the template in [Documenting architecture decisions - Michael Nygard](http://thinkrelevance.com/blog/2011/11/15/documenting-architecture-decisions). 4 | 5 | In each ADR file, write these sections: 6 | 7 | # Title 8 | 9 | ## Status 10 | 11 | What is the status, such as proposed, accepted, rejected, deprecated, superseded, etc.? 12 | 13 | ## Context 14 | 15 | What is the issue that we're seeing that is motivating this decision or change? 16 | 17 | ## Decision 18 | 19 | What is the change that we're proposing and/or doing? 20 | 21 | ## Consequences 22 | 23 | What becomes easier or more difficult to do because of this change? -------------------------------------------------------------------------------- /errorpages/403: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | We've got some trouble | 403 - Access Denied 7 | 8 | 9 | 10 |

Access Denied Error 403

Connections over HTTP are forbidden.

11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /eslint.config.js: -------------------------------------------------------------------------------- 1 | import { default as browserCompatibility } from "eslint-plugin-compat"; 2 | import jsdoc from "eslint-plugin-jsdoc"; 3 | 4 | export default [ 5 | // The below configuration ensures that code is compatible with the browser 6 | // versions defined in the .browserslistrc file. 7 | browserCompatibility.configs["flat/recommended"], 8 | // The below configuration ensures that code is documented and that the 9 | // documentation follows JSDoc formatting rules. 10 | { 11 | plugins: { 12 | jsdoc, 13 | }, 14 | ignores: [ 15 | "Universal-Federated-Analytics-Min.js" 16 | ], 17 | rules: { 18 | ...jsdoc.configs.recommended.rules, 19 | "jsdoc/check-indentation": "error", 20 | "jsdoc/check-line-alignment": "error", 21 | "jsdoc/check-syntax": "error", 22 | "jsdoc/convert-to-jsdoc-comments": "error", 23 | "jsdoc/no-bad-blocks": "error", 24 | "jsdoc/no-blank-block-descriptions": "error", 25 | "jsdoc/no-blank-blocks": "error", 26 | "jsdoc/require-asterisk-prefix": "error", 27 | "jsdoc/require-jsdoc": [ 28 | "error", 29 | { 30 | checkGetters: false, 31 | checkSetters: false, 32 | publicOnly: false, 33 | require: { 34 | ArrowFunctionExpression: true, 35 | ClassDeclaration: true, 36 | ClassExpression: true, 37 | FunctionDeclaration: true, 38 | FunctionExpression: true, 39 | MethodDefinition: true, 40 | }, 41 | }, 42 | ], 43 | "jsdoc/require-throws": "error", 44 | "jsdoc/sort-tags": "error", 45 | "jsdoc/tag-lines": "off", 46 | }, 47 | }, 48 | ]; 49 | -------------------------------------------------------------------------------- /features/README.md: -------------------------------------------------------------------------------- 1 | # DAP automated testing docs 2 | 3 | The automated tests for the DAP code are implemented using [cucumber-js](https://github.com/cucumber/cucumber-js) 4 | and [puppeteer](https://pptr.dev/). 5 | 6 | By default the tests use the local version of the DAP javascript files. Loading 7 | the code into a test HTML page, performing various user actions, and testing 8 | the behavior of the code in response to the user actions. 9 | 10 | Use the `DAP_ENV` environment variable to insert live versions of the code into 11 | the test HTML page instead of the local version as described below. 12 | 13 | ## Running the tests 14 | 15 | Start up the test site at http://localhost:8080/: 16 | 17 | ```bash 18 | npm run test-site 19 | ``` 20 | 21 | Then run the tests against the test site: 22 | 23 | ```bash 24 | npm run cucumber 25 | ``` 26 | 27 | ## Running the tests with a debugger attached 28 | 29 | ```bash 30 | npm run cucumber:debug 31 | ``` 32 | 33 | ## Configuring with environment variables 34 | 35 | ### Verbose mode 36 | 37 | Print debugging information to stdout while running the tests: 38 | 39 | ```bash 40 | VERBOSE=true npm run cucumber 41 | ``` 42 | 43 | ### Run tests against the live staging environment 44 | 45 | ```bash 46 | DAP_ENV=staging npm run cucumber 47 | ``` 48 | 49 | ### Run tests against the live production environment 50 | 51 | ```bash 52 | DAP_ENV=production npm run cucumber 53 | ``` 54 | -------------------------------------------------------------------------------- /features/autotracker_download.feature: -------------------------------------------------------------------------------- 1 | Feature: Downloads are reported to DAP when autotracking is enabled 2 | 3 | Background: 4 | Given I load an empty browser 5 | And DAP is configured for agency "GSA" 6 | 7 | Scenario: User clicks to download file with autotracker on 8 | Given DAP is configured with autotracking enabled 9 | When I load the test site 10 | And I click on a file to download it 11 | Then the file download is reported to DAP with interaction type "Mouse Click" 12 | 13 | Scenario: User presses Enter to download file with autotracker on 14 | Given DAP is configured with autotracking enabled 15 | When I load the test site 16 | And I highlight and press Enter on a file to download it 17 | Then the file download is reported to DAP with interaction type "Enter Key Keystroke" 18 | 19 | Scenario: User clicks to download file with autotracker off 20 | Given DAP is configured with autotracking disabled 21 | When I load the test site 22 | And I click on a file to download it 23 | Then the file download is not reported to DAP 24 | -------------------------------------------------------------------------------- /features/basic_page_load.feature: -------------------------------------------------------------------------------- 1 | Feature: Test the outgoing requests sent by a basic page with DAP code loaded 2 | 3 | Background: 4 | Given I load an empty browser 5 | And I set the browser to intercept outbound requests 6 | And DAP is configured for agency "GSA" 7 | 8 | Scenario: Loading the page with the DAP code without further action 9 | When I load the test site 10 | And I wait 5 seconds 11 | Then there is a GA4 request 12 | But there are no unexpected requests 13 | 14 | Scenario: Loading the page with the DAP code and clicking a button 15 | When I load the test site 16 | And I click on element with selector "#banner-button" 17 | And I wait 5 seconds 18 | Then there is a GA4 request 19 | But there are no unexpected requests 20 | -------------------------------------------------------------------------------- /features/configuration.feature: -------------------------------------------------------------------------------- 1 | Feature: A site can load the DAP code with varying levels of customization 2 | 3 | Background: 4 | Given I load an empty browser 5 | 6 | Scenario: Load a DAP-enabled page with agency and subagency 7 | Given DAP is configured for agency "HHS" 8 | And DAP is configured for subagency "CDC" 9 | When I load the test site 10 | Then DAP will set custom dimensions 11 | | agency | HHS | 12 | | subagency | CDC | 13 | 14 | Scenario: Load a DAP-enabled page with agency and site topic and site platform 15 | Given DAP is configured for agency "GSA" 16 | And DAP is configured with site topic "Analytics" 17 | And DAP is configured with site platform "Cloud.gov" 18 | When I load the test site 19 | Then DAP will set custom dimensions 20 | | agency | GSA | 21 | | site_topic | analytics | 22 | | site_platform | cloud.gov | -------------------------------------------------------------------------------- /features/support/dapconfig.js: -------------------------------------------------------------------------------- 1 | class DAPConfig { 2 | agency; 3 | subagency; 4 | sitetopic; 5 | siteplatform; 6 | autotracker; 7 | cto; 8 | 9 | constructor(agency) { 10 | this.agency = agency; 11 | } 12 | 13 | toQueryParams() { 14 | const configuredFields = Object.entries(this).filter(entry => entry[1] !== undefined); 15 | return new URLSearchParams(configuredFields).toString(); 16 | } 17 | } 18 | 19 | export default DAPConfig; -------------------------------------------------------------------------------- /features/support/hooks.js: -------------------------------------------------------------------------------- 1 | import { After } from "@cucumber/cucumber"; 2 | 3 | After(async function () { 4 | if (this.browser) { 5 | this.browser.close(); 6 | } 7 | delete this.browser; 8 | delete this.page; 9 | }); 10 | -------------------------------------------------------------------------------- /features/support/step_definitions/browser_steps.js: -------------------------------------------------------------------------------- 1 | import { Given, When, Then } from "@cucumber/cucumber"; 2 | import puppeteer from 'puppeteer'; 3 | import * as chai from 'chai' 4 | const expect = chai.expect; 5 | 6 | function delay(milliseconds) { 7 | return new Promise((resolve) => { 8 | setTimeout(resolve, milliseconds); 9 | }); 10 | } 11 | 12 | Given("I load an empty browser", async function () { 13 | this.browser = await puppeteer.launch(); 14 | this.page = await this.browser.newPage(); 15 | 16 | if (process.env.VERBOSE == 'true') { 17 | // Log page events to the node console 18 | this.page 19 | .on('console', message => 20 | console.log(`${message.type().substr(0, 3).toUpperCase()} ${message.text()}`)) 21 | .on('pageerror', ({ message }) => console.log(message)) 22 | .on('response', response => 23 | console.log(`${response.status()} ${response.url()}`)) 24 | .on('requestfailed', request => 25 | console.log(`${request.failure().errorText} ${request.url()}`)) 26 | } 27 | }); 28 | 29 | Given("I set the browser to intercept outbound requests", async function () { 30 | await this.page.setRequestInterception(true); 31 | this.requests = []; 32 | this.responses = []; 33 | 34 | this.page.on('request', (request) => { 35 | this.requests.push({ method: request.method(), headers: request.headers(), url: request.url() }); 36 | request.continue(); 37 | }); 38 | 39 | this.page.on('response', (response) => { 40 | this.responses.push(response); 41 | }) 42 | }); 43 | 44 | When("I wait {int} seconds", async function (delaySeconds) { 45 | await delay(delaySeconds * 1000); 46 | }); 47 | 48 | Then("there is a GA4 request", function () { 49 | const ga4Request = this.requests.find(request => { 50 | try { 51 | const url = new URL(request.url); 52 | return url.host === "www.google-analytics.com" && url.pathname === "/g/collect"; 53 | } catch (e) { 54 | return false; 55 | } 56 | }); 57 | expect(ga4Request).to.exist; 58 | }); 59 | 60 | Then("there are no unexpected requests", function () { 61 | const requestURLs = this.requests.map((request) => { 62 | return (new URL(request.url)).host; 63 | }); 64 | 65 | const allowedURLs = [ 66 | "localhost:8080", 67 | "d3vtlq0ztv2u27.cloudfront.net", 68 | "dap.digitalgov.gov", 69 | "www.googletagmanager.com", 70 | "www.google-analytics.com" 71 | ]; 72 | 73 | requestURLs.forEach((requestURL) => { 74 | expect(allowedURLs).to.include(requestURL); 75 | }) 76 | }) 77 | -------------------------------------------------------------------------------- /features/support/step_definitions/dataLayer_steps.js: -------------------------------------------------------------------------------- 1 | import { Then } from "@cucumber/cucumber"; 2 | import * as chai from 'chai' 3 | const expect = chai.expect; 4 | 5 | Then("DAP will set custom dimensions", async function (table) { 6 | const configCommand = await this.page.evaluate(() => { 7 | return window.dataLayer.find(item => item[0] === 'config'); 8 | }); 9 | expect(configCommand["0"]).to.equal("config"); 10 | expect(configCommand["1"]).to.equal("G-9TNNMGP8WJ"); 11 | expect(configCommand["2"]).to.include(table.rowsHash()); 12 | }); 13 | 14 | Then("the file download is reported to DAP with interaction type {string}", async function (interactionType) { 15 | const event = await this.page.evaluate(() => { 16 | return window.dataLayer.find(item => item[0] === 'event' && item[1] === 'file_download'); 17 | }); 18 | expect(event).to.deep.equal( 19 | { 20 | '0': 'event', 21 | '1': 'file_download', 22 | '2': { 23 | "interaction_type": interactionType, 24 | "send_to": 'GSA_GA4_ENOR0', 25 | "event_name_dimension": 'file_download', 26 | "file_extension": "zip", 27 | "file_name": "/about.zip", 28 | "link_domain": "localhost", 29 | "link_id": "internalDownload", 30 | "link_text": "/about.zip", 31 | "link_url": "http://localhost:8080/about.zip", 32 | } 33 | } 34 | ); 35 | }); 36 | 37 | Then("the file download is not reported to DAP", async function () { 38 | const event = await this.page.evaluate(() => { 39 | return window.dataLayer.find(item => item[0] === 'event' && item[1] === 'file_download'); 40 | }); 41 | expect(event).to.be.undefined; 42 | }); 43 | -------------------------------------------------------------------------------- /features/support/step_definitions/interaction_steps.js: -------------------------------------------------------------------------------- 1 | import { When } from "@cucumber/cucumber"; 2 | 3 | When("I click on a file to download it", async function () { 4 | await this.page.locator('#internalDownload').click(); 5 | }); 6 | 7 | When("I highlight and press Enter on a file to download it", async function () { 8 | await this.page.focus('#internalDownload'); 9 | await this.page.keyboard.press('Enter'); 10 | }); 11 | 12 | When("I click on element with selector {string}", async function (elementSelector) { 13 | await this.page.locator(elementSelector).click(); 14 | }); -------------------------------------------------------------------------------- /features/support/step_definitions/loading_steps.js: -------------------------------------------------------------------------------- 1 | import { Given, When } from "@cucumber/cucumber"; 2 | 3 | import DAPConfig from "../dapconfig.js"; 4 | 5 | Given("DAP is configured for agency {string}", function (agency) { 6 | this.dapConfig = new DAPConfig(agency); 7 | }); 8 | 9 | Given("DAP is configured for subagency {string}", function (subagency) { 10 | this.dapConfig.subagency = subagency; 11 | }); 12 | 13 | Given("DAP is configured with site topic {string}", function (sitetopic) { 14 | this.dapConfig.sitetopic = sitetopic; 15 | }); 16 | 17 | Given("DAP is configured with site platform {string}", function (siteplatform) { 18 | this.dapConfig.siteplatform = siteplatform; 19 | }); 20 | 21 | Given("DAP is configured with autotracking enabled", function () { 22 | this.dapConfig.autotracker = true; 23 | }); 24 | 25 | Given("DAP is configured with autotracking disabled", function () { 26 | this.dapConfig.autotracker = false; 27 | }); 28 | 29 | When("I load the test site", async function () { 30 | await this.page.goto(`http://localhost:8080?${this.dapConfig.toQueryParams()}`); 31 | }); 32 | -------------------------------------------------------------------------------- /hostnames.json: -------------------------------------------------------------------------------- 1 | { 2 | "_com": ["bigwes.com","armymwr.com","armytenmiler.com","armywcap.com","dragonhilllodge.com","edelweisslodgeandresort.com","halekoa.com","irresistiblemail.com", 3 | "moneyfactory.com","mwrbrandcentral.com","mwrresourcecenter.com","usmint.com","usps.com","uspscybersafe.com","uspsdelivers.com","uspsrocks.com", 4 | "uspssupport.com","watchusdeliver.com","watershedresourcesregistry.com"], 5 | "_gov": ["911.gov","18F.gov","2020census.gov","9-11commission.gov","911commission.gov","abandonedmines.gov","access-board.gov","acl.gov","acquisition.gov","acwi.gov","ada.gov", 6 | "adlnet.gov","admongo.gov","adr.gov","afadvantage.gov","aff.gov","agingstats.gov","ahrq.gov","ai.gov","airnow.gov","alaskacenters.gov","altusandc.gov","alzheimers.gov", 7 | "amberalert.gov","america.gov","americathebeautifulquarters.gov","ameslab.gov","anchorit.gov","anl.gov","anstaskforce.gov","applicationmanager.gov","apprenticeship.gov", 8 | "apps.gov","archives.gov","arctic.gov","arctic.gov","arm.gov","ars-grin.gov","arts.gov","asap.gov","atf.gov","aviationweather.gov","ayudaconmibanco.gov","bankanswers.gov", 9 | "bankcustomer.gov","bankcustomerassistance.gov","bankhelp.gov","banknet.gov","bea.gov","benefits.gov","bep.gov","bia.gov","bioeco.gov","bioethics.gov","biomassboard.gov", 10 | "biopreferred.gov","bja.gov","bjs.gov","bldrdoc.gov","blm.gov","bls.gov","bnl.gov","boem.gov","bondpro.gov","bop.gov","bpa.gov","brac.gov","brc.gov","bsee.gov","bts.gov", 11 | "buildbackbetter.gov","businessdefense.gov","buyaccessible.gov","buyusa.gov","cancer.gov","cao.gov","cbca.gov","cbp.gov","cbp.gov","ccac.gov","cdc.gov","cdiffund.gov","cdo.gov", 12 | "cendi.gov","census.gov","cep.gov","cfda.gov","cfo.gov","challenge.gov","chcoc.gov","childcare.gov","childreninadversity.gov","childstats.gov","childtaxcredit.gov","childwelfare.gov", 13 | "cio.gov","cisa.gov","ciso.gov","citizenscience.gov","climate.gov","clinicaltrials.gov","clintonlibrary.gov","cloud.gov","cms.gov","cmts.gov","cncsoig.gov","cnss.gov","code.gov", 14 | "code.gov","collegedrinkingprevention.gov","commerce.gov","complaintreferralexpress.gov","comptrollerofthecurrency.gov","computersforlearning.gov","connect.gov","consumer.gov", 15 | "consumidor.gov","continentalshelf.gov","contractdirectory.gov","coralreef.gov","coronavirus.gov","coronavirus.gov","covidtests.gov","cpars.gov","cpsc.gov", 16 | "crime-data-explorer.app.cloud.gov","crimesolutions.gov","crimevictims.gov","crt2014-2024review.gov","cttso.gov","cuidadodesalud.gov","cupcao.gov","cyber.gov","cybercareers.gov", 17 | "cybersecurity.gov","data.gov","dea.gov","defense.gov","dfc.gov","dhs.gov","dietaryguidelines.gov","digital.gov","digitaldashboard.gov","digitalgov.gov","digitalliteracy.gov", 18 | "directoasucuenta.gov","disasterassistance.gov","dja.gov","dnfsb.gov","dni.gov","dnsops.gov","doc.gov","docline.gov","doe.gov","doi.gov","doioig.gov","dol.gov","doleta.gov", 19 | "donaciondeorganos.gov","donotcall.gov","dot.gov","dotgov.gov","drought.gov","drugabuse.gov","dsac.gov","e-enterprise.gov","e-verify.gov","ecfr.gov","economicinclusion.gov", 20 | "econsumer.gov","ecopartnerships.gov","ecpic.gov","ed.gov","eda.gov","edpubs.gov","eeoc.gov","eftps.gov","eia.gov","eisenhowermemorial.gov","eldercare.gov", 21 | "employeeexpress.gov","employer.gov","empowhr.gov","ems.gov","endingthedocumentgame.gov","energy.gov","energycodes.gov","energystar.gov","epa.gov","epic.gov","esa.gov","esc.gov", 22 | "esrs.gov","eta-find.gov","ethicsburg.gov","evaluation.gov","evergladesrestoration.gov","everykidinapark.gov","everykidoutdoors.gov","evus.gov","execsec.gov","export.gov", 23 | "eyenote.gov","faa.gov","faasafety.gov","facadatabase.gov","fafsa.gov","fai.gov","fan.gov","fapiis.gov","fara.gov","farmers.gov","fatherhood.gov","fbi.gov","fbi.gov","fbijobs.gov", 24 | "fbo.gov","fcg.gov","fda.gov","fdic.gov","fdic-search.app.cloud.gov","fdicconnect.gov","fdicig.gov","fdicseguro.gov","fdms.gov","feb.gov","fec.gov","fedcenter.gov","federalinvestments.gov", 25 | "federalregister.gov","fedidcard.gov","fedinvest.gov","fedramp.gov","fedshirevets.gov","feedthefuture.gov","fehrm.gov","fema.gov","ferc.gov","fgdc.gov","fhfa.gov","fhfaoig.gov", 26 | "financialresearch.gov","fincen.gov","findtreatment.gov","firecode.gov","fireleadership.gov","firescience.gov","firstnet.gov","firstresponder.gov","firstrespondertraining.gov", 27 | "fishwatch.gov","fleta.gov","fletc.gov","flightschoolcandidates.gov","floodsmart.gov","fmi.gov","fnal.gov","foia.gov","foodsafety.gov","fordlibrarymuseum.gov","foreignassistance.gov", 28 | "forfeiture.gov","forfeiture.gov","fpc.gov","fpds.gov","frpg.gov","frtib.gov","frtr.gov","fsapubs.gov","fsd.gov","fsgb.gov","fsrs.gov","ftc.gov","ftccomplaintassistant.gov","ftcefile.gov", 29 | "fttesttwai.gov","fvap.gov","fws.gov","g5.gov","gcdamp.gov","gcmrc.gov","genome.gov","genome.gov","geomac.gov","geoplatform.gov","geoplatform.gov","getsmartaboutdrugs.gov","ghi.gov", 30 | "ginniemae.gov","girlshealth.gov","girlshealth.gov","globe.gov","godirect.gov","goes-r.gov","govloans.gov","govsales.gov","gpo.gov","gps.gov","grants.gov","grants.gov","grantsolutions.gov", 31 | "greatagain.gov","gsa.gov","gsaadvantage.gov","gsaauctions.gov","gsaig.gov","gsaxcess.gov","guideline.gov","guidelines.gov","hanford.gov","harp.gov","health.gov","healthcare.gov","healthdata.gov", 32 | "healthfinder.gov","healthit.gov","healthypeople.gov","helpwithmybank.gov","helpwithmycheckingaccount.gov","helpwithmycreditcard.gov","helpwithmycreditcardbank.gov","helpwithmymortgage.gov", 33 | "helpwithmymortgagebank.gov","hhs.gov","hirevets.gov","history.gov","hiv.gov","hive.gov","hrsa.gov","hru.gov","hud.gov","hudoig.gov","huduser.gov","humanrights.gov","hydrogen.gov","iab.gov", 34 | "iad.gov","iarpa.gov","iarpa-ideas.gov","iat.gov","iawg.gov","ibwc.gov","ic3.gov","icass.gov","ice.gov","identitytheft.gov","idmanagement.gov","ihs.gov","imls.gov","indianaffairs.gov", 35 | "inl.gov","innovation.gov","insurekidsnow.gov","integrity.gov","intelink.gov","invasivespeciesinfo.gov","investor.gov","ipac.gov","ipp.gov","iprcenter.gov","irs.gov","irsvideos.gov","ise.gov", 36 | "ise.gov","itap.gov","itdashboard.gov","its.gov","jccs.gov","jem.gov","jimmycarterlibrary.gov","jobcorps.gov","juntos.gov","justice.gov","justthinktwice.gov","juvenilecouncil.gov","klamathrestoration.gov", 37 | "lacoast.gov","landfire.gov","landimaging.gov","lbl.gov","lca.gov","lcacommons.gov","lcrmscp.gov","lep.gov","letgirlslearn.gov","llnl.gov","lmrcouncil.gov","lmvsci.gov","locatorplus.gov", 38 | "login.gov","madeinamerica.gov","makinghomeaffordable.gov","makinghomeaffordable.gov","malwareinvestigator.gov","manufacturing.gov","marine.gov","marinecadastre.gov","mbda.gov","mcc.gov", 39 | "medicaid.gov","medicalcountermeasures.gov","medicare.gov","medlineplus.gov","mentalhealth.gov","mgi.gov","militaryconsumer.gov","mitigationcommission.gov","mojavedata.gov","moneyfactory.gov", 40 | "moneyfactorystore.gov","mrlc.gov","msha.gov","mspb.gov","mtbs.gov","myira.gov","mymedicare.gov","myplate.gov","nagb.gov","nasa.gov","nationalbankhelp.gov","nationalgangcenter.gov","nationalmap.gov", 41 | "nationalresourcedirectory.gov","nationalservice.gov","nationsreportcard.gov","nativeonestop.gov","ncirc.gov","ncjrs.gov","ncpc.gov","ncua.gov","neglecteddiseases.gov","neh.gov","nehrp.gov","nemi.gov", 42 | "nersc.gov","nfpors.gov","ngc.gov","nhtsa.gov","nicic.gov","nicsezcheckfbi.gov","niem.gov","niem.gov","nifc.gov","nih.gov","nihseniorhealth.gov","nij.gov","nist.gov","nixonlibrary.gov","nlrb.gov", 43 | "nnlm.gov","noaa.gov","nolaenvironmental.gov","nps.gov","nrc.gov","nrd.gov","nrel.gov","nro.gov","nrojr.gov","nsa.gov","nsep.gov","nsf.gov","nsopw.gov","ntis.gov","ntsb.gov","nutrition.gov","nwbc.gov", 44 | "nwcg.gov","nwtrb.gov","obamalibrary.gov","occ.gov","occhelps.gov","odni.gov","oea.gov","ofcm.gov","ofda.gov","oge.gov","ojjdp.gov","ojp.gov","onrr.gov","opioids.gov","opm.gov","opportunityzones.gov", 45 | "orau.gov","organdonor.gov","ornl.gov","osac.gov","osha.gov","osmre.gov","osti.gov","ots.gov","ourdocuments.gov","ovc.gov","ovcttac.gov","papahanaumokuakea.gov","patriotbonds.gov","pay.gov", 46 | "paymentaccuracy.gov","pbgc.gov","pbrb.gov","pcah.gov","pclob.gov","peacecorps.gov","pepfar.gov","performance.gov","phe.gov","pic.gov","pif.gov","plainlanguage.gov","plainlanguage.gov", 47 | "pmf.gov","pmi.gov","pnl.gov","pnnl.gov","poolsafely.gov","ppirs.gov","pppl.gov","presidentialinnovationfellows.gov","presidentialserviceawards.gov","presidio.gov","privacyshield.gov", 48 | "prosperafrica.gov","psc.gov","psob.gov","rcfl.gov","ready.gov","reaganlibrary.gov","realestatesales.gov","realpropertyprofile.gov","recalls.gov","recoverymonth.gov","recreation.gov", 49 | "reginfo.gov","regulations.gov","relocatefeds.gov","reporting.gov","research.gov","rivers.gov","robodeidentidad.gov","rocis.gov","rrb.gov","sac.gov","safecom.gov","safeocs.gov","safercar.gov", 50 | "saferfederalworkforce.gov","saferproducts.gov","safertruck.gov","safetyact.gov","salmonrecovery.gov","sam.gov","samhsa.gov","sandia.gov","savingsbond.gov","savingsbonds.gov", 51 | "savingsbondwizard.gov","sba.gov","sbir.gov","sbst.gov","schoolsafety.gov","science.gov","science360.gov","sciencebase.gov","scijinks.gov","sdr.gov","search.gov","sec.gov","secretservice.gov", 52 | "section508.gov","selectagents.gov","selectusa.gov","serve.gov","sftool.gov","sierrawild.gov","sigtarp.gov","simplereport.gov","siteidiq.gov","sji.gov","slgs.gov","smart.gov","smartgrid.gov", 53 | "smokefree.gov","snap.gov","socialsecurity.gov","solardecathlon.gov","srs.gov","ssa.gov","state.gov","stateoig.gov","stb.gov","stopalcoholabuse.gov","stopbullying.gov","stopfakes.gov", 54 | "stopfraud.gov","stopmedicarefraud.gov","strategicsourcing.gov","studentaid.gov","studentloans.gov","surgeongeneral.gov","sustainability.gov","sustainablecommunities.gov","swpa.gov","symbols.gov", 55 | "taaps.gov","tax.gov","telework.gov","thecoolspot.gov","time.gov","together.gov","tox21.gov","trade.gov","trafficsafetymarketing.gov","transportation.gov","treaslockbox.gov","treasury.gov", 56 | "treasuryauctions.gov","treasurydirect.gov","treasuryhunt.gov","treasuryscams.gov","tsa.gov","tsp.gov","tsunami.gov","tswg.gov","ttb.gov","ttbonline.gov","unicor.gov","unlocktalent.gov","us-cert.gov", 57 | "usa.gov","usability.gov","usagm.gov","usaid.gov","usajobs.gov","usalearning.gov","usalearning.gov","usandc.gov","usap.gov","usaseanconnect.gov","usaspending.gov","usastaffing.gov","usbr.gov", 58 | "usccr.gov","uscis.gov","usconsulate.gov","uscourts.gov","usda.gov","usdoj.gov","usds.gov","usembassy.gov","usgs.gov","usitc.gov","usmarshals.gov","usmint.gov","usmission.gov","usphs.gov", 59 | "uspto.gov","ussm.gov","ustda.gov","ustr.gov","utahfireinfo.gov","va.gov","vaccines.gov","vacunas.gov","vcf.gov","vef.gov","vehiclehistory.gov","vetbiz.gov","veterans.gov","vets.gov", 60 | "vistacampus.gov","volunteer.gov","vote.gov","watermonitor.gov","wdol.gov","weather.gov","webharvest.gov","whistleblowers.gov","whitehouse.gov","whitehouseconferenceonaging.gov", 61 | "wildlifeadaptationstrategy.gov","wizard.gov","wlci.gov","womenshealth.gov","worker.gov","workplace.gov","wrp.gov","youth.gov","youthrules.gov"], 62 | "_mil": ["af.mil","afirm.mil","ai.mil","alsa.mil","army.mil","businessdefense.mil","cac.mil","centcom.mil","cyber.mil","data.mil","dcaa.mil","dcma.mil","dcoe.mil","dcoe.mil","dds.mil", 63 | "dhra.mil","dia.mil","disa.mil","dla.mil","dma.mil","dodig.mil","dodig.mil","dpaa.mil","dren.mil","dspo.mil","dtic.mil","dtra.mil","dtraa.mil","health.mil","inherentresolve.mil", 64 | "ise.mil","jcs.mil","jcu.mil","jecc.mil","marines.mil","mda.mil","medicalmuseum.mil","move.mil","move.mil","myduty.mil","mysymptoms.mil","nationalguard.mil","navy.mil","navy.mil", 65 | "ng.mil","nga.mil","nicbr.mil","norad.mil","northcom.mil","nro.mil","osd.mil","pacom.mil","pdhealth.mil","pentagonchannel.mil","people.mil","prs.mil","prs.mil","repi.mil","sapr.mil", 66 | "sigar.mil","southcom.mil","spacecom.mil","spaceforce.mil","stratcom.mil","tricare.mil","uscg.mil","usfj.mil","usfk.mil","whs.mil"], 67 | "_org": ["aaa1c.org","adlnet.org","agrilinks.org","anaalaska.org","anaeastern.org","ananlcc.org","anapacificbasin.org","anawestern.org","bcsc-research.org","biodiversitylinks.org", 68 | "bush41.org","careeronestop.org","climatelinks.org","diggingintodata.org","docsteach.org","edu-links.org","eisenhowermemorial.org","epolicyworks.org","federallabs.org","globalnetplatform.org", 69 | "globalwaters.org","jfk50.org","jfklibrary.org","jobcorps.org","land-links.org","lbjlibrary.org","marketlinks.org","nacarbon.org","northeastdiesel.org","nrt.org", 70 | "nsa-codebreaker.org","phs-nurse.org","psoppc.org","resiliencelinks.org","rooseveltinstitute.org","shadesofgreen.org","silvacarbon.org","smartamerica.org","trumanlibrary.org", 71 | "trumanlibraryinstitute.org","turnthetiderx.org","urban-links.org","usaidlearninglab.org","uspreventiveservicestaskforce.org","yesmeanstest.org"], 72 | "_edu": ["airuniversity.af.edu","bie.edu","bush41library.tamu.edu","cdse.edu","dinfos.edu","georgewbushlibrary.smu.edu","ndu.edu","usmma.edu"], 73 | "_net": ["afneurope.net","afnpacific.net","binational.net"], 74 | "_us": ["clinton.presidentiallibraries.us","fs.fed.us","glri.us","iwrmsuite.us","planusace.us","sffeb.us"], 75 | "_info": ["enviroflash.info"], 76 | "_cn": ["china.usembassy-china.org.cn"] 77 | } 78 | -------------------------------------------------------------------------------- /nginx-test.conf.template: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | listen [::]:80; 4 | server_name localhost; 5 | 6 | #access_log /var/log/nginx/host.access.log main; 7 | 8 | location / { 9 | ssi on; 10 | set $dap_code_env '${DAP_ENV}'; 11 | set $dap_code_location 'Universal-Federated-Analytics-Min.js'; 12 | 13 | if ($dap_code_env = 'stg') { 14 | set $dap_code_location 'https://d3vtlq0ztv2u27.cloudfront.net/Universal-Federated-Analytics-Min.js'; 15 | } 16 | if ($dap_code_env = 'prd') { 17 | set $dap_code_location 'https://dap.digitalgov.gov/Universal-Federated-Analytics-Min.js'; 18 | } 19 | 20 | # Create the script tag to include in each page's header using the 21 | # dap_code_location which is defined above 22 | set $header_script_tag ' 23 | 34 | '; 35 | 36 | root /usr/share/nginx/html; 37 | index index.html index.htm; 38 | } 39 | 40 | #error_page 404 /404.html; 41 | 42 | # redirect server error pages to the static page /50x.html 43 | # 44 | error_page 500 502 503 504 /50x.html; 45 | location = /50x.html { 46 | root /usr/share/nginx/html; 47 | } 48 | 49 | # proxy the PHP scripts to Apache listening on 127.0.0.1:80 50 | # 51 | #location ~ \.php$ { 52 | # proxy_pass http://127.0.0.1; 53 | #} 54 | 55 | # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 56 | # 57 | #location ~ \.php$ { 58 | # root html; 59 | # fastcgi_pass 127.0.0.1:9000; 60 | # fastcgi_index index.php; 61 | # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; 62 | # include fastcgi_params; 63 | #} 64 | 65 | # deny access to .htaccess files, if Apache's document root 66 | # concurs with nginx's one 67 | # 68 | #location ~ /\.ht { 69 | # deny all; 70 | #} 71 | } 72 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "digital-analytics-program", 3 | "version": "4.1.0", 4 | "description": "Provides a JavaScript file for US federal agencies to link or embed in their websites to participate in the Digital Analytics Program.", 5 | "main": "Universal-Federated-Analytics.js", 6 | "type": "module", 7 | "scripts": { 8 | "clean": "rm ./Universal-Federated-Analytics-Min.js", 9 | "lint": "eslint Universal-Federated-Analytics.js", 10 | "cucumber": "cucumber-js", 11 | "cucumber:debug": "VERBOSE=true node --inspect-brk node_modules/@cucumber/cucumber/bin/cucumber-js", 12 | "test-site-dev": "docker build --no-cache --build-arg DAP_ENV='dev' -t dap-test-site-dev . && docker run --rm -p 8080:80 --name dap-test-site-dev dap-test-site-dev", 13 | "test-site-stg": "docker build --no-cache --build-arg DAP_ENV='stg' -t dap-test-site-stg . && docker run --rm -p 8080:80 --name dap-test-site-stg dap-test-site-stg", 14 | "test-site-prd": "docker build --no-cache --build-arg DAP_ENV='prd' -t dap-test-site-prd . && docker run --rm -p 8080:80 --name dap-test-site-prd dap-test-site-prd" 15 | }, 16 | "repository": { 17 | "type": "git", 18 | "url": "git+https://github.com/digital-analytics-program/gov-wide-code.git" 19 | }, 20 | "license": "ISC", 21 | "bugs": { 22 | "url": "https://github.com/digital-analytics-program/gov-wide-code/issues" 23 | }, 24 | "homepage": "https://github.com/digital-analytics-program/gov-wide-code#readme", 25 | "devDependencies": { 26 | "@cucumber/cucumber": "^11.0.0", 27 | "chai": "^5.1.1", 28 | "eslint": "^9.8.0", 29 | "eslint-plugin-compat": "^6.0.0", 30 | "eslint-plugin-jsdoc": "^50.2.2", 31 | "puppeteer": "^23.3.0" 32 | }, 33 | "dependencies": { 34 | "web-vitals": "^4.2.4" 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /querystrings.json: -------------------------------------------------------------------------------- 1 | { 2 | "default": ["utm_id","utm_source","utm_medium","utm_campaign","utm_term","utm_content"], 3 | "test3": ["test3","work","id"], 4 | "wes_test": ["wes","test"], 5 | "gsa": ["challenge","affiliate","state"], 6 | "dhs": ["appreceiptnum"], 7 | "doc": ["station","meas","start","atlc","epac","cpac","basin","fdays","cone","tswind120","gm_track","50wind120","hwind120","mltoa34","swath","radii","wsurge","key_messages","inundation","rainqpf","ero","gage","wfo","spanish_key_messages","key_messages","sid"], 8 | "hhs": ["s_cid","selectedFacets"], 9 | "hud": ["PostID"], 10 | "nasa": ["feature","ProductID","selectedFacets"], 11 | "nps": ["gid","mapid","site","webcam","id"], 12 | "nsf": ["meas","start","atlc","epac","cpac","basin","fdays","cone","tswind120","gm_track","50wind120","hwind120","mltoa34","swath","radii","wsurge","key_messages","inundation","rainqpf","ero","gage","wfo","spanish_key_messages","key_messages","sid"], 13 | "va": ["id"] 14 | } 15 | -------------------------------------------------------------------------------- /test_site/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | DAP test site 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 |

Digital Analytics Program (DAP) Code - QA Website

15 |
16 | 17 |

Banner Click

18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |

26 | An official website of the United States government 27 |

28 |

Here’s how you know

29 |
30 | 33 |
34 |
35 | 62 |
63 |
64 | 65 | 66 | 67 | 68 |
69 |

Email Click

70 |

shouldn't match

71 | email link (shouldn't match)
73 |

Internal Emails (Same Domain & SubDomain)

74 | mailto:test@dap-test-site.app.cloud.gov
75 | mailto:test2@dap-test-site.app.cloud.gov
76 |

Internal Emails (Same Domain & SubDomain - Level 1)

77 | MAILTO:TEST@TEST1.dap-test-site.app.cloud.gov
78 | mailto:test2@test1.dap-test-site.app.cloud.gov
79 |

Internal Emails (Same Domain & SubDomain - Level 2)

80 | mailto:test@level2.test1.dap-test-site.app.cloud.gov
81 | mailto:test2@level2.test1.dap-test-site.app.cloud.gov
82 |

External Links (Different Domain)

83 | mailto:test@domain.com
84 | mailto:test2@domain.com
85 |
86 | 87 | 88 | 89 |
90 |

Telephone Click

91 | Telephone +14379251855 (shouldn't match)
92 | Telephone 1111111111 (shouldn't match)
93 | Telephone +1437-925-1855
94 | Telephone 111-111-1111
95 | Telephone 111 111 1111
96 | Telephone 111.111.1111
97 |
98 | 99 | 100 |
101 |

File Download

102 |

Internal Downloads (Same Domain & SubDomain) - Relative Path

103 | /about.zip
104 | ../../3.0/about.zip
105 | /policy/about.zip
106 | /plocy/about.zip
107 |

Internal Downloads (Same Domain & SubDomain) - Absolute Path

108 | https://www.dap-test-site.app.cloud.gov/about.zip
109 | https://www.dap-test-site.app.cloud.gov/policy/about.zip
110 |

Internal Downloads (Same Domain & Different SubDomain - Level 1) - Absolute Path

111 | https://test1.dap-test-site.app.cloud.gov/about.zip
112 | https://test1.dap-test-site.app.cloud.gov/policy/about.zip
113 |

Internal Downloads (Same Domain & Different SubDomain - Level 2) - Absolute Path

114 | https://level2.test1.dap-test-site.app.cloud.gov/about.zip
115 | https://level2.test1.dap-test-site.app.cloud.gov/policy/about.zip
116 |

External Downloads (Different Domain) - Absolute Path

117 | Scheudle A
118 | Schedule C
119 |

120 | 121 | 122 | 123 |
124 |

Internal Links

125 | Federal Travel Policy - /travelpolicy.pim
126 | 127 |

(Same Domain & SubDomain) - Relative Path

128 | /about.php
129 | ./../3.0/about.php
130 | /about/
131 | ../../3.0/about
132 | /about
133 | /policy/about.php
134 | ../../3.0/plocy/about.php
135 | ../../3.0/ploicy/about
136 | /policy/about/
137 | /poicy/about
138 | /policy/about
139 | 140 |

(Same Domain & SubDomain) - Absolute Path

141 | https://www.dap-test-site.app.cloud.gov/about.php
142 | https://www.dap-test-site.app.cloud.gov/about/
143 | https://www.dap-test-site.app.cloud.gov/policy/about.php
144 | https://www.dap-test-site.app.cloud.gov/ploicy/about/
145 | 146 |

(Same Domain & Different SubDomain - Level 1) - Absolute Path

147 | https://test1.dap-test-site.app.cloud.gov/about.php
148 | https://test1.dap-test-site.app.cloud.gov/about/
149 | https://test1.dap-test-site.app.cloud.gov/policy/about.php
150 | https://test1.dap-test-site.app.cloud.gov/ploicy/about/
151 | 152 |

(Same Domain & Different SubDomain - Level 2) - Absolute Path

153 | https://level2.test1.dap-test-site.app.cloud.gov/about.php
154 | https://level2.test1.dap-test-site.app.cloud.gov/about/
155 | https://level2.test1.dap-test-site.app.cloud.gov/policy/about.php
156 | https://level2.test1.dap-test-site.app.cloud.gov/ploicy/about/
157 |
158 | 159 |
160 |

External Links

161 |

(Different Domain) - Absolute Path

162 | http://www.gsa.gov/travelpolicy
163 | http://www.gsa.gov/travelpolicy/home.aspx?id=12#top
164 | http://www.domain.com/about.php
165 | http://www.domain.com/about/ S1
166 | http://www.domain.com/about S2
167 | http://www.domain.com/policy/about.php
168 | http://www.domain.com/about/
169 |

170 | 171 | 172 | 173 |
174 |

Dynamic Content

175 |
176 |
177 | 178 | 179 | 180 |
181 |

Youtube Tracking

182 | Go to YouTube tracking test page 183 |
184 | 185 | 186 | 187 |
188 |

gas() - Custom Events / Pageviews / Custom Dimensions / Custom Metrics (Federated Only)

189 | Pageview without title
190 | Pageview with title
191 | Event
192 | Custom Dimension
193 | Custom Dimension
194 | Custom Metric
195 | Custom Metric
196 |
197 | 198 | 199 | 200 |
201 |

gas4() - Form Interaction

202 |
203 |
204 |

gas4()

205 |
206 |
207 |
208 |
209 |

210 | 211 |
212 |
213 |
214 |

Incorrect Parameters

215 |
216 |
217 |
218 |
219 |

220 | 221 |
222 |
223 |
224 |

Incorrect Event Name

225 |
226 |
227 |
228 |
229 |

230 | 231 |
232 |
233 |
234 |
235 | 236 | 237 |
238 |

gas4() - Social click

239 |
240 |
241 |

gas4()

242 | 243 | 244 | 245 | 246 |
247 |
248 |

Incorrect Parameters

249 | 250 | 251 | 252 | 253 |
254 |
255 |

Incorrect Event Name

256 | 257 | 258 | 259 | 260 |
261 |
262 | 263 | 264 | 265 |
266 | 267 | 268 |
269 |

gas4() - Social share

270 |
271 |
272 |

gas4()

273 | 274 | 275 | 276 | 277 |
278 |
279 |

Incorrect Parameters

280 | 281 | 282 | 283 | 284 |
285 |
286 |

Incorrect Event Name

287 | 288 | 289 | 290 | 291 |
292 |
293 | 294 | 295 | 296 |
297 | 298 |
299 |

gas4() - Navigation Click

300 |
301 | 306 |
307 |

308 |
309 | 310 |
311 |

gas4() - Accordion

312 | 313 |
314 |

one

315 |
316 | 317 | 318 |
319 |

two

320 |
321 | 322 | 323 |
324 |

three

325 |
326 |
327 | 328 | 329 |
330 |

gas4() - FAQ Click

331 | 332 |
333 |

one

334 |
335 | 336 | 337 |
338 |

two

339 |
340 | 341 | 342 |
343 |

three

344 |
345 |
346 | 347 | 348 |
349 |

gas4() - Call to Action Click

350 |

351 |

352 |

353 |
354 | 355 | 356 | 357 | 469 | 470 | 487 | 488 | 489 | 490 | 491 | -------------------------------------------------------------------------------- /test_site/youtube.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | DAP test site - YouTube tracking 7 | 8 | 9 | 10 | 11 | 12 |
13 |
16 |

20 | 22 |
23 | 24 | 25 | --------------------------------------------------------------------------------