@flyfish-group/file-viewer 1.0.23 → 1.0.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +390 -0
- package/README.md +83 -34
- package/dist/components/3MFLoader.js +1 -1
- package/dist/components/AMFLoader.js +1 -1
- package/dist/components/ArchiveViewer.js +314 -139
- package/dist/components/AudioViewer.js +1 -1
- package/dist/components/CadViewer.js +1 -1
- package/dist/components/CodeViewer.js +1 -1
- package/dist/components/ColladaLoader.js +1 -1
- package/dist/components/DrawingViewer.js +1 -1
- package/dist/components/EdaViewer.js +1 -1
- package/dist/components/EmailViewer.js +1 -1
- package/dist/components/EpubViewer.js +1 -1
- package/dist/components/FBXLoader.js +1 -1
- package/dist/components/GLTFLoader.js +1 -1
- package/dist/components/ImageViewer.js +1 -1
- package/dist/components/KMZLoader.js +1 -1
- package/dist/components/MarkdownViewer.js +1 -1
- package/dist/components/OBJLoader.js +1 -1
- package/dist/components/OfdViewer.js +1 -1
- package/dist/components/PCDLoader.js +1 -1
- package/dist/components/PLYLoader.js +1 -1
- package/dist/components/PdfView.js +5839 -5668
- package/dist/components/PptxRender.js +2356 -2332
- package/dist/components/STLLoader.js +1 -1
- package/dist/components/TDSLoader.js +1 -1
- package/dist/components/TypstViewer.js +320 -300
- package/dist/components/USDLoader.js +1 -1
- package/dist/components/UmdViewer.js +2 -2
- package/dist/components/VRMLLoader.js +1 -1
- package/dist/components/VTKLoader.js +1 -1
- package/dist/components/XYZLoader.js +1 -1
- package/dist/components/XlsxTable.js +1 -1
- package/dist/components/___vite-browser-external_commonjs-proxy.js +1 -1
- package/dist/components/_commonjs-dynamic-modules.js +1 -1
- package/dist/components/_commonjsHelpers.js +1 -1
- package/dist/components/ar-SA-G6X2FPQ2.js +1 -1
- package/dist/components/arc.js +1 -1
- package/dist/components/architecture-7EHR7CIX.js +1 -1
- package/dist/components/architectureDiagram-3BPJPVTR.js +1 -1
- package/dist/components/az-AZ-76LH7QW2.js +1 -1
- package/dist/components/bash.js +1 -0
- package/dist/components/bg-BG-XCXSNQG7.js +1 -1
- package/dist/components/blockDiagram-GPEHLZMM.js +1 -1
- package/dist/components/bn-BD-2XOGV67Q.js +1 -1
- package/dist/components/c4Diagram-AAUBKEIU.js +1 -1
- package/dist/components/ca-ES-6MX7JW3Y.js +1 -1
- package/dist/components/cfb.js +1 -1
- package/dist/components/channel.js +1 -1
- package/dist/components/chunk-2J33WTMH.js +1 -1
- package/dist/components/chunk-4BX2VUAB.js +1 -1
- package/dist/components/chunk-55IACEB6.js +1 -1
- package/dist/components/chunk-727SXJPM.js +1 -1
- package/dist/components/chunk-AQP2D5EJ.js +1 -1
- package/dist/components/chunk-FMBD7UC4.js +1 -1
- package/dist/components/chunk-ND2GUHAM.js +1 -1
- package/dist/components/chunk-QZHKN3VN.js +1 -1
- package/dist/components/classDiagram-4FO5ZUOK.js +1 -1
- package/dist/components/classDiagram-v2-Q7XG4LA2.js +1 -1
- package/dist/components/core.js +1 -0
- package/dist/components/cose-bilkent-S5V4N54A.js +1 -1
- package/dist/components/cpp.js +1 -0
- package/dist/components/cs-CZ-2BRQDIVT.js +1 -1
- package/dist/components/csharp.js +1 -0
- package/dist/components/css.js +1 -0
- package/dist/components/cytoscape.esm.js +1 -1
- package/dist/components/da-DK-5WZEPLOC.js +1 -1
- package/dist/components/dagre-BM42HDAG.js +1 -1
- package/dist/components/de-DE-XR44H4JA.js +1 -1
- package/dist/components/defaultLocale.js +1 -1
- package/dist/components/diagram-2AECGRRQ.js +1 -1
- package/dist/components/diagram-5GNKFQAL.js +1 -1
- package/dist/components/diagram-KO2AKTUF.js +1 -1
- package/dist/components/diagram-LMA3HP47.js +1 -1
- package/dist/components/diagram-OG6HWLK6.js +1 -1
- package/dist/components/diff.js +1 -0
- package/dist/components/directory-open-01563666.js +1 -1
- package/dist/components/directory-open-4ed118d0.js +1 -1
- package/dist/components/docx-preview.js +2 -2
- package/dist/components/el-GR-BZB4AONW.js +1 -1
- package/dist/components/en-B4ZKOASM.js +1 -1
- package/dist/components/erDiagram-TEJ5UH35.js +1 -1
- package/dist/components/es-ES-U4NZUMDT.js +1 -1
- package/dist/components/eu-ES-A7QVB2H4.js +1 -1
- package/dist/components/eventmodeling-FCH6USID.js +1 -1
- package/dist/components/fa-IR-HGAKTJCU.js +1 -1
- package/dist/components/fflate.module.js +1 -1
- package/dist/components/fi-FI-Z5N7JZ37.js +1 -1
- package/dist/components/file-open-002ab408.js +1 -1
- package/dist/components/file-open-7c801643.js +1 -1
- package/dist/components/file-save-3189631c.js +1 -1
- package/dist/components/file-save-745eba88.js +1 -1
- package/dist/components/flowDiagram-I6XJVG4X.js +1 -1
- package/dist/components/fr-FR-RHASNOE6.js +1 -1
- package/dist/components/ganttDiagram-6RSMTGT7.js +1 -1
- package/dist/components/gitGraph-WXDBUCRP.js +1 -1
- package/dist/components/gitGraphDiagram-PVQCEYII.js +1 -1
- package/dist/components/gl-ES-HMX3MZ6V.js +1 -1
- package/dist/components/global-compiler.js +1 -1
- package/dist/components/global-renderer.js +1 -1
- package/dist/components/go.js +1 -0
- package/dist/components/graph.js +1 -1
- package/dist/components/he-IL-6SHJWFNN.js +1 -1
- package/dist/components/hi-IN-IWLTKZ5I.js +1 -1
- package/dist/components/hu-HU-A5ZG7DT2.js +1 -1
- package/dist/components/id-ID-SAP4L64H.js +1 -1
- package/dist/components/image-GAAHSSAO.js +1 -1
- package/dist/components/image-blob-reduce.esm.js +1 -1
- package/dist/components/index10.js +1 -1
- package/dist/components/index11.js +1 -1
- package/dist/components/index12.js +1 -1
- package/dist/components/index13.js +1 -1
- package/dist/components/index14.js +1 -1
- package/dist/components/index15.js +1 -1
- package/dist/components/index16.js +1 -1
- package/dist/components/index17.js +1 -1
- package/dist/components/index18.js +1 -1
- package/dist/components/index19.js +1 -1
- package/dist/components/index2.js +1 -1
- package/dist/components/index20.js +1 -1
- package/dist/components/index21.js +1 -1
- package/dist/components/index22.js +2 -2
- package/dist/components/index23.js +1 -1
- package/dist/components/index24.js +1 -1
- package/dist/components/index3.js +1 -1
- package/dist/components/index4.js +1 -1
- package/dist/components/index5.js +1 -1
- package/dist/components/index6.js +1 -1
- package/dist/components/index7.js +1 -1
- package/dist/components/index8.js +1 -1
- package/dist/components/index9.js +1 -1
- package/dist/components/info-J43DQDTF.js +1 -1
- package/dist/components/infoDiagram-5YYISTIA.js +1 -1
- package/dist/components/ini.js +1 -0
- package/dist/components/init.js +1 -1
- package/dist/components/ishikawaDiagram-YF4QCWOH.js +1 -1
- package/dist/components/it-IT-JPQ66NNP.js +1 -1
- package/dist/components/ja-JP-DBVTYXUO.js +1 -1
- package/dist/components/java.js +1 -0
- package/dist/components/javascript.js +1 -0
- package/dist/components/journeyDiagram-JHISSGLW.js +1 -1
- package/dist/components/json.js +1 -0
- package/dist/components/jszip.min.js +1 -1
- package/dist/components/kaa-6HZHGXH3.js +1 -1
- package/dist/components/kab-KAB-ZGHBKWFO.js +1 -1
- package/dist/components/kanban-definition-UN3LZRKU.js +1 -1
- package/dist/components/katex.js +1 -1
- package/dist/components/kk-KZ-P5N5QNE5.js +1 -1
- package/dist/components/km-KH-HSX4SM5Z.js +1 -1
- package/dist/components/ko-KR-MTYHY66A.js +1 -1
- package/dist/components/ku-TR-6OUDTVRD.js +1 -1
- package/dist/components/layout.js +1 -1
- package/dist/components/libarchive.js +1 -1
- package/dist/components/linear.js +1 -1
- package/dist/components/lt-LT-XHIRWOB4.js +1 -1
- package/dist/components/lv-LV-5QDEKY6T.js +1 -1
- package/dist/components/markdown.js +1 -0
- package/dist/components/mermaid-parser.core.js +2 -2
- package/dist/components/mindmap-definition-RKZ34NQL.js +1 -1
- package/dist/components/mr-IN-CRQNXWMA.js +1 -1
- package/dist/components/my-MM-5M5IBNSE.js +1 -1
- package/dist/components/nb-NO-T6EIAALU.js +1 -1
- package/dist/components/nestedRender.js +1 -1
- package/dist/components/nl-NL-IS3SIHDZ.js +1 -1
- package/dist/components/nn-NO-6E72VCQL.js +1 -1
- package/dist/components/oc-FR-POXYY2M6.js +1 -1
- package/dist/components/ofd.js +1 -1
- package/dist/components/ordinal.js +1 -1
- package/dist/components/pa-IN-N4M65BXN.js +1 -1
- package/dist/components/packet-YPE3B663.js +1 -1
- package/dist/components/percentages-BXMCSKIN.js +1 -1
- package/dist/components/php.js +1 -0
- package/dist/components/pica.js +1 -1
- package/dist/components/pie-LRSECV5Y.js +1 -1
- package/dist/components/pie.js +1 -1
- package/dist/components/pieDiagram-4H26LBE5.js +1 -1
- package/dist/components/pl-PL-T2D74RX3.js +1 -1
- package/dist/components/postal-mime.js +1 -1
- package/dist/components/printLayout.js +1 -1
- package/dist/components/pt-BR-5N22H2LF.js +1 -1
- package/dist/components/pt-PT-UZXXM6DQ.js +1 -1
- package/dist/components/python.js +1 -0
- package/dist/components/quadrantDiagram-W4KKPZXB.js +1 -1
- package/dist/components/radar-GUYGQ44K.js +1 -1
- package/dist/components/requirementDiagram-4Y6WPE33.js +1 -1
- package/dist/components/ro-RO-JPDTUUEW.js +1 -1
- package/dist/components/rough.esm.js +1 -1
- package/dist/components/roundRect.js +1 -1
- package/dist/components/ru-RU-B4JR7IUQ.js +1 -1
- package/dist/components/rust.js +1 -0
- package/dist/components/sankeyDiagram-5OEKKPKP.js +1 -1
- package/dist/components/sequenceDiagram-3UESZ5HK.js +1 -1
- package/dist/components/si-LK-N5RQ5JYF.js +1 -1
- package/dist/components/sk-SK-C5VTKIMK.js +1 -1
- package/dist/components/sl-SI-NN7IZMDC.js +1 -1
- package/dist/components/sql.js +1 -0
- package/dist/components/stateDiagram-AJRCARHV.js +1 -1
- package/dist/components/stateDiagram-v2-BHNVJYJU.js +1 -1
- package/dist/components/subset-shared.chunk.js +1 -1
- package/dist/components/subset-worker.chunk.js +1 -1
- package/dist/components/sv-SE-XGPEYMSR.js +1 -1
- package/dist/components/ta-IN-2NMHFXQM.js +1 -1
- package/dist/components/th-TH-HPSO5L25.js +1 -1
- package/dist/components/time.js +1 -1
- package/dist/components/timeline-definition-PNZ67QCA.js +1 -1
- package/dist/components/tr-TR-DEFEU3FU.js +1 -1
- package/dist/components/transform.js +1 -1
- package/dist/components/treeView-BLDUP644.js +1 -1
- package/dist/components/treemap-LRROVOQU.js +1 -1
- package/dist/components/typescript.js +1 -0
- package/dist/components/uk-UA-QMV73CPH.js +1 -1
- package/dist/components/vennDiagram-CIIHVFJN.js +1 -1
- package/dist/components/vi-VN-M7AON7JQ.js +1 -1
- package/dist/components/wardley-L42UT6IY.js +1 -1
- package/dist/components/wardleyDiagram-YWT4CUSO.js +1 -1
- package/dist/components/wasm-pack-shim.js +1 -1
- package/dist/components/wasm-pack-shim2.js +1 -1
- package/dist/components/worker-ref.js +1 -1
- package/dist/components/xml.js +1 -0
- package/dist/components/xychartDiagram-2RQKCTM6.js +1 -1
- package/dist/components/yaml.js +1 -0
- package/dist/components/zh-CN-LNUGB5OW.js +1 -1
- package/dist/components/zh-HK-E62DVLB3.js +1 -1
- package/dist/components/zh-TW-RAJ6MFWO.js +1 -1
- package/dist/index.d.ts +248 -11
- package/dist/index.mjs +1 -1
- package/dist/style.css +3 -12
- package/dist/wasm/cad/dwg-worker.js +24 -349
- package/package.json +4 -2
- package/dist/wasm/cad/DwgWorker-CuZJ5EUe.js +0 -349
- package/dist/wasm/cad/index-C365l3i9.js +0 -4161
|
@@ -1 +1 @@
|
|
|
1
|
-
const bg=b;(function(h,i){const b0=b,j=h();while(!![]){try{const m=parseInt(b0(0x2a2))/0x1+-parseInt(b0(0x1f2))/0x2*(-parseInt(b0(0x268))/0x3)+-parseInt(b0(0x20a))/0x4+-parseInt(b0(0x23d))/0x5*(parseInt(b0(0x2c7))/0x6)+-parseInt(b0(0x1a7))/0x7+parseInt(b0(0x19f))/0x8+-parseInt(b0(0x1ae))/0x9*(parseInt(b0(0x214))/0xa);if(m===i)break;else j['push'](j['shift']());}catch(n){j['push'](j['shift']());}}}(a,0x2b331));import{b as c,g as e,f,a as g}from'./printLayout.js';const Be={'width':0x31a,'height':0x463},Qe=((()=>{const h={'module':null,async 'load'(){return this['module']||(this['module']=import('./docx-preview.js')),this['module'];}};return async()=>await h['load']();})()),et='\x0a.docx-fit-viewer\x20{\x0a\x20\x20box-sizing:\x20border-box;\x0a\x20\x20height:\x20100%;\x0a\x20\x20overflow:\x20auto;\x0a\x20\x20background:\x20#ececec;\x0a}\x0a.docx-fit-viewer\x20.docx-wrapper\x20{\x0a\x20\x20box-sizing:\x20border-box;\x0a\x20\x20min-width:\x200\x20!important;\x0a\x20\x20width:\x20100%\x20!important;\x0a\x20\x20padding:\x2024px\x2014px\x2040px\x20!important;\x0a\x20\x20background:\x20#e7e9ec\x20!important;\x0a}\x0a.docx-fit-viewer\x20.docx-page-frame\x20{\x0a\x20\x20position:\x20relative;\x0a\x20\x20width:\x20100%;\x0a\x20\x20min-width:\x200;\x0a\x20\x20margin:\x200\x20auto\x2024px;\x0a\x20\x20overflow:\x20visible;\x0a}\x0a.docx-fit-viewer\x20.docx-page-frame\x20>\x20section.docx\x20{\x0a\x20\x20position:\x20absolute;\x0a\x20\x20top:\x200;\x0a\x20\x20left:\x2050%;\x0a\x20\x20margin:\x200\x20!important;\x0a\x20\x20background:\x20#ffffff\x20!important;\x0a\x20\x20box-shadow:\x200\x202px\x2014px\x20rgba(25,\x2035,\x2048,\x200.18);\x0a\x20\x20box-sizing:\x20border-box;\x0a\x20\x20color:\x20#111827;\x0a\x20\x20overflow:\x20hidden;\x0a\x20\x20transform-origin:\x20top\x20center;\x0a}\x0a';function tt(h){const i=document['createElement']('style');return i['textContent']=et,h['prepend'](i),i;}function ke(h,i,j){const m=h['cloneNode'](!0x1);m['innerHTML']='',m['dataset']['docxPaginated']='true',m['style']['minHeight']=j+'px',m['style']['height']=j+'px',m['style']['overflow']='hidden';const o=i['cloneNode'](!0x1);return m['appendChild'](o),Array['from'](h['children'])['forEach'](p=>{const b1=b;p!==i&&m[b1(0x1f3)](p['cloneNode'](!0x0));}),{'page':m,'article':o};}function rt(h){const b2=b,i=window['getComputedStyle'](h),j=parseFloat(i['minHeight']);return Number[b2(0x220)](j)&&j>0x0?j:h['offsetHeight'];}function nt(h){const i=h['querySelector']('.docx-wrapper');i&&Array['from'](i['children'])['forEach'](j=>{const b3=b;if(!(j instanceof HTMLElement)||!j['matches']('section.docx'))return;const m=j['querySelector'](':scope\x20>\x20article');if(!(m instanceof HTMLElement))return;const p=rt(j),u=Array['from'](m['childNodes']);if(!p||u[b3(0x2a7)]<0x2||j[b3(0x2bd)]<=p*1.15)return;let v=ke(j,m,p);j[b3(0x20b)](v[b3(0x202)]),u['forEach'](y=>{const b4=b3;v['article']['appendChild'](y),!(v['page']['scrollHeight']<=p+0x1||v['article']['childNodes']['length']===0x1)&&(v['article']['removeChild'](y),v=ke(j,m,p),j['before'](v['page']),v['article'][b4(0x1f3)](y));}),j['remove']();});}function at(h){const b5=b,i=h['querySelector']('.docx-wrapper');return i?Array['from'](i[b5(0x29c)])[b5(0x1aa)](j=>{const b6=b5;if(!(j instanceof HTMLElement)||!j[b6(0x283)]('section.docx'))return[];const m=document['createElement']('div');return m[b6(0x22e)]=b6(0x240),j['before'](m),m[b6(0x1f3)](j),[m];}):[];}function st(h){h['classList']['add']('docx-fit-viewer');const i=tt(h);nt(h);const j=at(h);let m=0x0;const o=()=>{window['cancelAnimationFrame'](m),m=window['requestAnimationFrame'](()=>{j['forEach'](v=>{const b7=b,y=v[b7(0x1b1)];if(!(y instanceof HTMLElement))return;y['style']['transform']='translateX(-50%)';const A=y['offsetWidth'],B=y[b7(0x2c2)];if(!A||!B)return;const D=Math[b7(0x2b0)](v['clientWidth']-0x8,0x78),E=Math['min'](0x1,Math['max'](0.24,D/A));y[b7(0x1d5)]['transform']='translateX(-50%)\x20scale('+E+')',v['style']['height']=Math['ceil'](B*E)+'px';});});},p=new ResizeObserver(o);return p['observe'](h),j['forEach'](u=>p['observe'](u)),o(),()=>{window['cancelAnimationFrame'](m),p['disconnect'](),i['remove'](),h['classList']['remove']('docx-fit-viewer');};}function $e(h){const i=h['firstElementChild'];return i instanceof HTMLElement?i:null;}function We(h){const i=h?$e(h):null;return i?e(i,Be):Be;}function ot(h,i){const b8=b,j=f(i['width']),m=f(i[b8(0x276)]);g(h,i),h[b8(0x1d5)]['margin']='0\x20auto\x2018px';const o=$e(h);o&&(o['style'][b8(0x1e0)]='relative',o['style']['top']='auto',o['style']['left']='auto',o['style']['width']=j,o[b8(0x1d5)]['maxWidth']='none',o['style']['minHeight']=m,o['style']['height']=m,o['style']['margin']='0\x20auto',o['style'][b8(0x1da)]=b8(0x1fe),o['style']['transformOrigin']='top\x20left',o['style'][b8(0x1f9)]='hidden',o[b8(0x1d5)]['boxShadow']='none');}function ct(h){const b9=b,i=h['querySelector']('.docx-page-frame'),j=We(i||void 0x0);return c({'selector':'.viewer-export-content\x20.docx-page-frame','width':j['width'],'height':j[b9(0x276)]});}function it(h){const ba=b,i=Array['from'](h['querySelectorAll']('.docx-page-frame')),j=h['cloneNode'](!0x0),m=document['createElement']('div');m['className']='docx-print-document';const o=Array['from'](j['querySelectorAll'](ba(0x1d5)))['filter'](p=>!p['textContent']?.[ba(0x1ee)]('.docx-fit-viewer'))[ba(0x1e7)](p=>p['outerHTML'])['join']('');return j['querySelectorAll']('.docx-page-frame')['forEach']((p,u)=>{ot(p,We(i[u])),m['appendChild'](p['cloneNode'](!0x0));}),m['childElementCount']?''+o+m['outerHTML']:j['innerHTML'];}async function rn(h,i,j){const {defaultOptions:m,renderAsync:p}=await Qe(),u=Object['assign'](m,{'debug':!0x0,'experimental':!0x0});await p(h,i,void 0x0,u);const v=st(i);return j?.['registerExportAdapter']?.({'includeDocumentStyles':!0x1,'beforeSnapshot':()=>{const bb=b;window[bb(0x243)](new Event('resize'));},'printStyle':()=>ct(i),'toHtml':()=>it(i)}),{'$el':i,'unmount'(){j?.['registerExportAdapter']?.(null),v(),i['innerHTML']='';}};}const Fe=globalThis['Buffer'];let Ie=0x0;function U(h){const bc=b;return String(h)['replace'](/&/g,'&')[bc(0x227)](/</g,bc(0x229))['replace'](/>/g,'>')['replace'](/"/g,'"')['replace'](/'/g,''');}function W(h='id'){return Ie+=0x1,h+'-'+Ie;}function te(h){return h%0x2===0x0?h:h+0x1;}function lt(h){const bd=b,i=h instanceof Uint8Array?h:h instanceof ArrayBuffer?new Uint8Array(h):new Uint8Array(h['buffer'],h[bd(0x1bc)],h[bd(0x1b2)]);if(Fe)return Fe['from'](i)['toString']('base64');let j='';const m=0x8000;for(let o=0x0;o<i['length'];o+=m)j+=String['fromCharCode'](...i['subarray'](o,Math['min'](o+m,i['length'])));return btoa(j);}function pe(h,i='application/octet-stream'){return'data:'+i+';base64,'+lt(h);}function Oe(h){return String(h??'')['toLowerCase']()['replace'](/[^a-z0-9\u4e00-\u9fa5]+/g,'-')['replace'](/^-+|-+$/g,'')||'item';}function Ne(h,i){const bf=b;if(h===i)return!0x0;if(!h||!i)return!0x1;const j=Object['keys'](h),m=Object['keys'](i);if(j[bf(0x2a7)]!==m['length'])return!0x1;for(const o of j)if(h[o]!==i[o])return!0x1;return!0x0;}function ce(h,i,j){const m=j?{'message':i,...j}:{'message':i};return h['push'](m),m;}function z(h,i=0x60){if(!(h==null||Number['isNaN'](h)))return h/0x5a0*i;}function pt(h){return String(h??'')['replace'](/\u000b/g,'\x0a')['replace'](/\u000c/g,'\x0a');}function ye(h='utf-8'){return new TextDecoder(h,{'fatal':!0x1});}const Ee=ye('utf-16le'),ft=ye(typeof TextDecoder<'u'?'windows-1252':bg(0x2c4));class w{['bytes'];['view'];['length'];constructor(h){const bh=bg;if(h instanceof Uint8Array)this[bh(0x1a1)]=h;else{if(h instanceof ArrayBuffer)this[bh(0x1a1)]=new Uint8Array(h);else{if(ArrayBuffer[bh(0x1a4)](h))this['bytes']=new Uint8Array(h['buffer'],h[bh(0x1bc)],h['byteLength']);else throw new TypeError('BinaryReader\x20expects\x20ArrayBuffer\x20or\x20Uint8Array');}}this['view']=new DataView(this['bytes']['buffer'],this['bytes']['byteOffset'],this['bytes']['byteLength']),this['length']=this[bh(0x1a1)][bh(0x1b2)];}['ensure'](h,i=0x1){return h>=0x0&&h+i<=this['length'];}['u8'](h){const bi=bg;return this['ensure'](h,0x1)?this['view'][bi(0x1e6)](h):0x0;}['i8'](h){return this['ensure'](h,0x1)?this['view']['getInt8'](h):0x0;}['u16'](h){return this['ensure'](h,0x2)?this['view']['getUint16'](h,!0x0):0x0;}['i16'](h){const bj=bg;return this['ensure'](h,0x2)?this['view'][bj(0x216)](h,!0x0):0x0;}[bg(0x228)](h){const bk=bg;return this[bk(0x1d7)](h,0x4)?this['view']['getUint32'](h,!0x0):0x0;}[bg(0x2c0)](h){return this['ensure'](h,0x4)?this['view']['getInt32'](h,!0x0):0x0;}[bg(0x2cf)](h){const i=this['u32'](h);return this['u32'](h+0x4)*0x100000000+i;}['slice'](h,i){return this['ensure'](h,i)?this['bytes']['subarray'](h,h+i):new Uint8Array(0x0);}['array'](h,i,j){const m=[],p=j['byteWidth']??0x1;for(let u=0x0;u<i;u+=0x1)m['push'](j['call'](this,h+u*p));return m;}[bg(0x218)](h,i){const bl=bg;return this['ensure'](h,i)?Ee[bl(0x254)](this['slice'](h,i)):'';}['latin1'](h,i){const bm=bg;return this['ensure'](h,i)?ft['decode'](this[bm(0x1ab)](h,i)):'';}['ascii'](h,i){const bn=bg;if(!this['ensure'](h,i))return'';let j='';const m=this[bn(0x1ab)](h,i);for(let o=0x0;o<m['length'];o+=0x1)j+=String['fromCharCode'](m[o]??0x0);return j;}['utf16z'](h,i){const bo=bg,j=this[bo(0x1ab)](h,i);let m=j['length'];for(let o=0x0;o+0x1<j['length'];o+=0x2)if(j[o]===0x0&&j[o+0x1]===0x0){m=o;break;}return Ee['decode'](j[bo(0x1f0)](0x0,m));}}w['prototype']['u8']['byteWidth']=0x1,w['prototype']['i8']['byteWidth']=0x1,w['prototype']['u16']['byteWidth']=0x2,w['prototype']['i16']['byteWidth']=0x2,w[bg(0x24f)]['u32'][bg(0x28f)]=0x4,w['prototype']['i32']['byteWidth']=0x4;function dt(h){const bp=bg;if(h instanceof Uint8Array)return h;if(h instanceof ArrayBuffer)return new Uint8Array(h);if(ArrayBuffer[bp(0x1a4)](h))return new Uint8Array(h['buffer'],h['byteOffset'],h['byteLength']);throw new TypeError('Unsupported\x20binary\x20input');}const De=[0xd0,0xcf,0x11,0xe0,0xa1,0xb1,0x1a,0xe1],ue=0xffffffff,Y=0xfffffffe,ut=0xfffffffd,mt=0xfffffffc,ht=0x1<<0x14,gt=0x1000;function Ae(h){return h===ue||h===Y||h===ut||h===mt;}function Pe(h,i,j){const m=0x200+j*i,o=m+i;if(m<0x0||m>=h['length'])throw new Error('Sector\x20'+j+'\x20is\x20out\x20of\x20bounds');if(o<=h['length'])return h['subarray'](m,o);const p=new Uint8Array(i);return p['set'](h['subarray'](m)),p;}function Ue(h,i,j=ht){const m=[],p=new Set();let u=h,v=0x0;for(;u!==Y&&u!==ue&&u>=0x0;){if(p['has'](u))throw new Error('Detected\x20sector\x20loop\x20at\x20'+u);if(p['add'](u),m['push'](u),u=i(u),v+=0x1,v>j)throw new Error('Sector\x20chain\x20exceeds\x20safe\x20limit');}return m;}function oe(h,j,m,p,u=null){const bq=bg;if(m===Y||m===ue||m<0x0)return new Uint8Array(0x0);const v=Ue(m,B=>p[B]??Y),y=new Uint8Array(v[bq(0x2a7)]*j);let A=0x0;for(const B of v)y['set'](Pe(h,j,B),A),A+=j;return u==null?y:y['subarray'](0x0,Math['min'](u,y['length']));}function xt(h){function i(p,u){const bs=b;if(p<0x0||p>=h[bs(0x2a7)])return;const v=h[p];v&&(i(v[bs(0x2ad)],u),u[bs(0x279)](p),i(v['rightSiblingId'],u));}function j(p){const bu=b,u=h[p];if(!u||u['childId']<0x0)return;const v=[];i(u['childId'],v),u[bu(0x29c)]=v;for(const y of v){const A=h[y];A&&(A[bu(0x259)]=p,j(y));}}const m=h['find'](o=>o['objectType']===0x5);if(!m)throw new Error('CFB\x20root\x20storage\x20not\x20found');return j(m['id']),m;}function bt(h){const bv=bg,i=new Map();for(const j of h){if(!j||!j['name'])continue;const m=[];let o=j;for(;o;)o['objectType']!==0x5&&m['push'](o['name']),o=o['parentId']!=null?h[o[bv(0x259)]]??null:null;const p='/'+m['reverse']()[bv(0x293)]('/');j['path']=p==='/'?'/'+j[bv(0x1b7)]:p,i['set'](j['path'],j);}return i;}function wt(h){return h['replace'](/\u0000+$/,'');}function yt(Q,a0={}){const bw=bg,a1=dt(Q),a2=new w(a1),a3=[];for(let aA=0x0;aA<De['length'];aA+=0x1)if(a2['u8'](aA)!==De[aA])throw new Error('Not\x20a\x20Compound\x20File\x20Binary\x20document');const a4=a2['u16'](0x1a),a5=a2['u16'](0x1e),a6=a2['u16'](0x20),a7=0x1<<a5,a8=0x1<<a6,a9=a2['u32'](0x28),aa=a2['u32'](0x2c),ab=a2['i32'](0x30),ac=a2[bw(0x228)](0x34),ad=a2['u32'](0x38),af=a2[bw(0x2c0)](0x3c),ag=a2['u32'](0x40),ah=a2[bw(0x2c0)](0x44),ai=a2[bw(0x228)](0x48);ad!==gt&&ce(a3,'Unexpected\x20mini\x20stream\x20cutoff\x20size\x20'+ad);const aj=[];for(let aB=0x0;aB<0x6d;aB+=0x1){const aC=a2['i32'](0x4c+aB*0x4);!Ae(aC)&&aC>=0x0&&aj['push'](aC);}const ak=[...aj];let al=ah,am=0x0;for(;al!==Y&&al!==ue&&al>=0x0;){const aD=Pe(a1,a7,al),aE=new w(aD),aF=a7/0x4-0x1;for(let aG=0x0;aG<aF;aG+=0x1){const aH=aE['i32'](aG*0x4);!Ae(aH)&&aH>=0x0&&ak[bw(0x279)](aH);}if(al=aE['i32'](a7-0x4),am+=0x1,am>ai+0x4){ce(a3,bw(0x281));break;}}aa&&ak['length']<aa&&ce(a3,'FAT\x20sector\x20count\x20mismatch:\x20header\x20says\x20'+aa+',\x20found\x20'+ak['length']);const an=[];for(const aI of ak){const aJ=Pe(a1,a7,aI),aK=new w(aJ);for(let aL=0x0;aL<a7/0x4;aL+=0x1)an['push'](aK['i32'](aL*0x4));}const ao=oe(a1,a7,ab,an),ap=new w(ao),aq=[];for(let aM=0x0,aN=0x0;aM+0x80<=ao['length'];aM+=0x80,aN+=0x1){const aO=ap['u16'](aM+0x40),aP=wt(ap['utf16le'](aM,Math['max'](0x0,aO-0x2)));!aP&&ap['u8'](aM+0x42)===0x0||aq['push']({'id':aN,'name':aP,'objectType':ap['u8'](aM+0x42),'colorFlag':ap['u8'](aM+0x43),'leftSiblingId':ap['i32'](aM+0x44),'rightSiblingId':ap['i32'](aM+0x48),'childId':ap[bw(0x2c0)](aM+0x4c),'clsid':ap['slice'](aM+0x50,0x10),'stateBits':ap['u32'](aM+0x60),'creationTime':ap['u64'](aM+0x64),'modifiedTime':ap[bw(0x2cf)](aM+0x6c),'startSector':ap['i32'](aM+0x74),'streamSize':a4===0x3?ap['u32'](aM+0x78):ap['u64'](aM+0x78),'children':[],'parentId':null});}const as=xt(aq),au=bt(aq),av=[];if(ag&&af>=0x0){const aQ=oe(a1,a7,af,an),aR=new w(aQ);for(let aS=0x0;aS+0x4<=aQ['length'];aS+=0x4)av['push'](aR['i32'](aS));}const aw=oe(a1,a7,as['startSector'],an,as['streamSize']);function ax(aT){const bx=bw;if(aT['startSector']<0x0)return new Uint8Array(0x0);const aU=Ue(aT['startSector'],aX=>av[aX]??Y),aV=new Uint8Array(aU['length']*a8);let aW=0x0;for(const aX of aU){const aY=aX*a8,aZ=aY+a8;if(aZ>aw['length'])throw new Error('Mini\x20sector\x20'+aX+'\x20is\x20out\x20of\x20bounds');aV['set'](aw['subarray'](aY,aZ),aW),aW+=a8;}return aV['subarray'](0x0,Math[bx(0x2a0)](aT['streamSize'],aV['length']));}function ay(aT){const aU=typeof aT=='string'?au['get'](aT)??null:aT;return!aU||aU['objectType']!==0x2&&aU['objectType']!==0x5?null:aU['objectType']===0x5?aw:aU['streamSize']<ad&&aU['startSector']>=0x0&&av['length']?ax(aU):oe(a1,a7,aU['startSector'],an,aU['streamSize']);}function az(aT){const by=bw,aU=typeof aT=='string'?au['get'](aT)??null:aT;return aU?(aU[by(0x29c)]||[])['map'](aV=>aq[aV])['filter'](aV=>!!aV):[];}return{'bytes':a1,'majorVersion':a4,'sectorSize':a7,'miniSectorSize':a8,'numDirSectors':a9,'numFatSectors':aa,'firstDirSector':ab,'transactionSignature':ac,'miniStreamCutoffSize':ad,'warnings':a3,'entries':aq,'root':as,'pathMap':au,'getEntry'(aT){return au['get'](aT)??null;},'getStream':ay,'listChildren':az,'findByName'(aT,aU='/'){const bz=bw,aV=aU==='/'?as:au['get'](aU)??null;if(!aV)return null;const aW=[aV];for(;aW['length'];){const aX=aW[bz(0x23c)]();if(aX){if(aX['name']===aT)return aX;for(const aY of aX['children']||[]){const aZ=aq[aY];aZ&&aW['push'](aZ);}}}return null;}};}const Pt={'\u0082':'‚','\u0083':'ƒ','\u0084':'„','\u0085':'…','\u0086':'†','\u0087':'‡','\u0088':'ˆ','\u0089':'‰','\u008a':'Š','\u008b':'‹','\u008c':'Œ','\u0091':'‘','\u0092':'’','\u0093':'“','\u0094':'”','\u0095':'•','\u0096':'–','\u0097':'—','\u0098':'˜','\u0099':'™','\u009a':'š','\u009b':'›','\u009c':'œ','\u009f':'Ÿ'};function Tt(h){return h['replace'](/[\x82-\x8C\x91-\x9C\x9F]/g,i=>Pt[i]||i);}function St(h){let i='';for(let j=0x0;j<h['length'];j+=0x1)i+=String['fromCharCode'](h[j]??0x0);return Tt(i);}function Ct(h){const bA=bg;return new TextDecoder(bA(0x278))[bA(0x254)](h);}function vt(h,j){const bB=bg,m=j[bB(0x273)],v=j['lcbClx'];if(m==null||v==null||v<=0x0)throw new Error(bB(0x247));const y=h[bB(0x1f0)](m,m+v),A=new w(y);let B=0x0;const D=[];for(;B<y['length']&&A['u8'](B)===0x1;){const H=A['u16'](B+0x1);D['push']({'type':0x1,'cbGrpprl':H,'bytes':A['slice'](B+0x3,H)}),B+=0x3+H;}if(A['u8'](B)!==0x2)throw new Error('CLX\x20does\x20not\x20contain\x20a\x20Pcdt\x20marker');const E=A['u32'](B+0x1),F=A['slice'](B+0x5,E),G=Bt(F);return{'prcs':D,'pcdt':{'lcb':E,'pieceTable':G}};}function Bt(j){const bC=bg;if(!j['length'])throw new Error('Empty\x20PlcPcd');const m=new w(j),v=(j['length']-0x4)/0xc;if(!Number['isInteger'](v)||v<0x0)throw new Error('Invalid\x20PlcPcd\x20size');const A=[];for(let E=0x0;E<v+0x1;E+=0x1)A['push'](m['u32'](E*0x4));const B=[];let D=(v+0x1)*0x4;for(let F=0x0;F<v;F+=0x1){const G=m[bC(0x219)](D),H=m['u32'](D+0x2)>>>0x0,I=m['u16'](D+0x6),K=!!(H&0x40000000),M=H&0x3fffffff,O=A[F]??0x0,P=A[F+0x1]??O,Q=K?Math['floor'](M/0x2):M,R=K?P-O:(P-O)*0x2;B['push']({'index':F,'descriptor':G,'fNoParaLast':!!(G&0x1),'fRaw':!!(G&0x2),'prm':I,'compressed':K,'fcRaw':H,'fc':M,'cpStart':O,'cpEnd':P,'actualByteStart':Q,'byteLength':R,'actualByteEnd':Q+R}),D+=0x8;}return{'cps':A,'pieces':B};}function a(){const cZ=['unknown','byteWidth','RouteSlip','defTable','object','join','widthAfter','background-color','border-bottom','forEach','actualByteStart','single','round','font-variant-caps','children','sprmTVertMerge','sprmPBrcBetween80','properties','min','dwLowDateTime','195528bkdOJr','sprmTFitText','SttbfCaption','frameLeft','highlight','length','fWhichTblStm','values','ole2','wave','spacingBefore','leftSiblingId','attachment','listId','max','kind','instruction','px\x22','SttbfAtnBkmk','#ff00ff','smallCaps','</tr>','BkdMotherOldOld','gapHalf','shading','merge','setShading','scrollHeight','charProps','inline-block','i32','match','offsetHeight','borderBetween','latin1','get','number','17994cPdrBN','getStream','#000000','sprmPChgTabsPapx','styleId','html','borders','/ObjectPool','u64','listLevel','rtlPara','#00ffff','sprmPBrcBar80','#ff0000','sprmTPc','mime','css','has','913560Cwyohw','right','bytes','leftBoundary','DocUndoWord9','isView','sprmCFItalic','base','1504552iqstBo','rgfc','widowControl','flatMap','slice','rtl','embedded-file','81iqwwOa','collapse','framePosition','firstElementChild','byteLength','sprmTSetShdOdd','PlcfBteChpx','sprmCDxaSpace','width','name','trim','top','firstLineIndent','cells','byteOffset','msdoc-paragraph','boldBi','PlcPad','range','sprmCFShadow','minHeight','.msdoc-root','href','spacingAfterAuto','PlcffldHdrTxbx','SttbListNames','sprmTDxaCol','between','bold','margin-top','margin-bottom','PlcupcUsp','altName','split','text','PlcupcRgbUse','sprmPBrcRight80','start','div','style','text-decoration-style','ensure','parseToHtml','sprmCFStrike','transform','sprmTDyaFromText','embed','from','objectType','absLeft','position','#c0c0c0','BkdEdnOldOld','lcbSttbfFfn','add','spacingAfter','getUint8','map','rgdxaCenter','sprmPFInnerTableCell','DggInfo','sprmPDyaAbs','hyperlink','ftsWidth','includes','vertAlign','subarray','label','982CaYtfO','appendChild','distanceLeft','rowHeight','sprmPDyaLine','\x27,\x20sans-serif','rowspan','overflow','hidden','string','items','visible','none','display','sprmCRgFtc0','inlines','page','para','borderTop','terminator','caps','deleteCells','scaleX(','#000080','574444FWPTKR','before',',\x200.06em\x200.06em\x200.08em\x20rgba(0,0,0,.25)','frameTop','entry','solid','cpara','sprmPFKeep','.bin','StwUser','61690JtGeSX','distanceFromTextY','getInt16','sprmTTextFlow','utf16le','u16','wavy','frameWidth','tableWidth','sprmPDxaLeft1','PlcfendTxt','positionCode','isFinite','objinfo','fibRgFcLcb','noWrap','plain','table-layout','nodes','replace','u32','<','sprmPBrcTop80','data','stdfBase','sprmTVertAlign','className','underline','borderRight','toString','value','state','sprmTTableBorders80','paragraphs','parsed','rightBoundary','\x20rowspan=\x22','rightIndent','borderLeft','lcbStshf','pop','5HeOHGH','maxPictureBytes','tableProps','docx-page-frame','alignment','colorIndex','dispatchEvent','cpStart','<li><a\x20class=\x22msdoc-attachment\x22\x20href=\x22','adjustRight','FIB\x20does\x20not\x20point\x20to\x20a\x20CLX\x20structure','fontFamilyId','paraState','break-inside','sprmTTableHeader','PlcfAsumy','meta','find','prototype','tcgrf','columnWidth','paragraph','dotted-heavy','decode','<a\x20class=\x22msdoc-attachment\x22\x20href=\x22','filter','sprmPBrcTop','sprmTFBiDi','parentId','nextOffset','sprmPBrcBar','frameWrap','type','application/octet-stream','cpEnd','gridWidthTwips','dotted','cupx','char','PlcfPgdFtn','margin-right','readingInstruction','vertMerge','1737twQGhT','absTop','border-left','#808000','100%','fontSizeHalfPoints','left','pageBreak','sprmPChgTabs','first','lineSpacing','fcClx','PlcfFldMom','sprm_','height','table','utf-16le','push','sprmCFItalicBi','cantSplit','transform-origin','listChildren','border-top','fontFamily','sprmPFLocked','DIFAT\x20chain\x20exceeded\x20declared\x20sector\x20count;\x20stopping\x20early','cellNoWrap','matches','hideMark','link','hardLineBreak','chpxOffsets','ole10native','operations','cloneNode','colspan','lcbPlcfBteChpx','contents'];a=function(){return cZ;};return a();}function kt(h,i){const j=h['subarray'](i['actualByteStart'],i['actualByteEnd']);return i['compressed']?St(j):Ct(j);}function Ft(h,i){return i['pcdt']['pieceTable']['pieces']['map'](j=>kt(h,j));}function fe(h,j,m=null){const bD=bg,u=h['pcdt']['pieceTable']['pieces'],v=m??!!(j&0x40000000),y=m==null?j&0x3fffffff:j,A=v?Math['floor'](y/0x2):y;for(const B of u){if(A<B['actualByteStart']||A>B['actualByteEnd'])continue;const D=A-B[bD(0x298)],E=B['cpStart']+Math['floor'](D/(B['compressed']?0x1:0x2));if(E>=B['cpStart']&&E<=B[bD(0x25f)])return E;}for(const F of u){if(j<F[bD(0x298)]||j>F['actualByteEnd'])continue;const G=j-F['actualByteStart'],H=F['cpStart']+Math['floor'](G/(F['compressed']?0x1:0x2));if(H>=F['cpStart']&&H<=F['cpEnd'])return H;}return null;}function b(c,d){c=c-0x19e;const e=a();let f=e[c];return f;}function It(h,j,m,u,v){if(v<=u)return'';const y=[];for(let A=0x0;A<j['pcdt']['pieceTable']['pieces']['length'];A+=0x1){const B=j['pcdt']['pieceTable']['pieces'][A];if(B['cpEnd']<=u)continue;if(B['cpStart']>=v)break;const D=Math['max'](u,B['cpStart'])-B['cpStart'],E=Math['min'](v,B['cpEnd'])-B['cpStart'];y['push']((m[A]??'')['slice'](D,E));}return y['join']('');}function Et(h){const bE=bg,i=[];let j=0x0;for(let m=0x0;m<h[bE(0x2a7)];m+=0x1){const o=h[m];(o==='\x0d'||o==='\x07')&&(i['push']({'cpStart':j,'cpEnd':m+0x1,'terminator':o}),j=m+0x1);}return j<h[bE(0x2a7)]&&i['push']({'cpStart':j,'cpEnd':h['length'],'terminator':''}),i;}const L={'paragraph':'\x0d','cellMark':'\x07','picture':'\x01','fieldStart':'\x13','fieldSeparator':'\x14','fieldEnd':'\x15','annotationRef':'\x05','hardLineBreak':'\x0b','pageBreak':'\x0c','nonBreakingHyphen':'\x1e','nonRequiredHyphen':'\x1f'},Dt={0x0:'none',0x1:bg(0x299),0x2:'word',0x3:'double',0x4:bg(0x261),0x5:'hidden',0x6:'thick',0x7:'dash',0x9:'dot-dash',0xa:'dot-dot-dash',0xb:bg(0x2ab),0x10:bg(0x253),0x11:'dashed-heavy',0x12:'dash-long',0x13:'dash-long-heavy',0x14:'dot-dash-heavy',0x15:'dot-dot-dash-heavy',0x16:'wavy-heavy',0x17:'wavy-double'},At={0x0:'left',0x1:'center',0x2:bg(0x1a0),0x3:'justify',0x4:'distributed'},Mt={0x0:bg(0x1b9),0x1:'center',0x2:'bottom'},Te={0x1:'#000000',0x2:'#0000ff',0x3:'#00ffff',0x4:'#00ff00',0x5:bg(0x2b5),0x6:bg(0x2d4),0x7:'#ffff00',0x8:'#ffffff',0x9:bg(0x209),0xa:'#008080',0xb:'#008000',0xc:'#800080',0xd:'#800000',0xe:bg(0x26b),0xf:'#808080',0x10:bg(0x1e1)},Lt=['StshfOrig','Stshf','PlcffndRef','PlcffndTxt','PlcfandRef','PlcfandTxt','PlcfSed',bg(0x1bf),'PlcfPhe','SttbfGlsy','PlcfGlsy','PlcfHdd',bg(0x1b4),'PlcfBtePapx','PlcfSea','SttbfFfn',bg(0x274),'PlcfFldHdr','PlcfFldFtn','PlcfFldAtn','PlcfFldMcr','SttbfBkmk','PlcfBkf','PlcfBkl','Cmds','Unused1','SttbfMcr','PrDrvr','PrEnvPort','PrEnvLand','Wss','Dop','SttbfAssoc','Clx',bg(0x264),'AutosaveSource','GrpXstAtnOwners',bg(0x2b4),'Unused2','Unused3','PlcSpaMom','PlcSpaHdr','PlcfAtnBkf','PlcfAtnBkl','Pms','FormFldSttbs','PlcfendRef',bg(0x21e),'PlcfFldEdn','Unused4',bg(0x1ea),'SttbfRMark',bg(0x2a4),'SttbfAutoCaption','PlcfWkb','PlcfSpl','PlcftxbxTxt','PlcfFldTxbx','PlcfHdrtxbxTxt',bg(0x1c6),bg(0x213),'SttbTtmbd','CookieData','PgdMotherOldOld',bg(0x2b8),'PgdFtnOldOld','BkdFtnOldOld','PgdEdnOldOld',bg(0x1e2),'SttbfIntlFld',bg(0x290),'SttbSavedBy','SttbFnm','PlfLst','PlfLfo','PlcfTxbxBkd','PlcfTxbxHdrBkd',bg(0x1a3),'RgbUse','Usp','Uskf',bg(0x1d1),bg(0x1cd),'SttbGlsyStyle','Plgosl','Plcocx','PlcfBteLvc',bg(0x2a1),'dwHighDateTime','PlcfLvcPre10',bg(0x24c),'PlcfGram',bg(0x1c7),'SttbfUssr'];function Rt(j){const bF=bg,m=new w(j),v=Ht(m);let A=0x20;const B=m['u16'](A);A+=0x2;const D=m[bF(0x1ab)](A,B*0x2);A+=B*0x2;const E=m['u16'](A);A+=0x2;const F=m['slice'](A,E*0x4);A+=E*0x4;const G=m[bF(0x219)](A);A+=0x2;const H=m['slice'](A,G*0x8);A+=G*0x8;const I=m['ensure'](A,0x2)?m['u16'](A):0x0;m['ensure'](A,0x2)&&(A+=0x2);const K=I?m['slice'](A,I*0x2):new Uint8Array(0x0),M=$t(F),O=Wt(H,G),P=I?new w(K)[bF(0x219)](0x0):0x0;return{'base':v,'csw':B,'cslw':E,'cbRgFcLcb':G,'cswNew':I,'nFibNew':P,'fibRgWBytes':D,'fibRgLwBytes':F,'fibRgFcLcbBytes':H,'fibRgCswNewBytes':K,'fibRgLw':M,'fibRgFcLcb':O};}function Ht(h){const bG=bg,i=h['u16'](0x0),j=h['u16'](0x2),m=h[bG(0x219)](0x6),p=h['u16'](0x8),u=h['u16'](0xa),v=h[bG(0x219)](0x12);return{'wIdent':i,'nFib':j,'lid':m,'pnNext':p,'flags':u,'envFlags':v,'fDot':!!(u&0x1),'fGlsy':!!(u&0x2),'fComplex':!!(u&0x4),'fHasPic':!!(u&0x8),'cQuickSaves':u>>0x4&0xf,'fEncrypted':!!(u&0x100),'fWhichTblStm':u&0x200?0x1:0x0,'fReadOnlyRecommended':!!(u&0x400),'fWriteReservation':!!(u&0x800),'fExtChar':!!(u&0x1000),'fLoadOverride':!!(u&0x2000),'fFarEast':!!(u&0x4000),'fObfuscated':!!(u&0x8000),'nFibBack':h['u16'](0xc),'lKey':h['u32'](0xe),'envr':h['u8'](0x12),'fMac':!!(v&0x1),'fEmptySpecial':!!(v&0x2),'fLoadOverridePage':!!(v&0x4)};}function $t(h){const i=new w(h),j=[];for(let m=0x0;m+0x4<=h['length'];m+=0x4)j['push'](i['i32'](m));return{'raw':j,'cbMac':j[0x0]??0x0,'ccpText':j[0x3]??0x0,'ccpFtn':j[0x4]??0x0,'ccpHdd':j[0x5]??0x0,'ccpMcr':j[0x6]??0x0,'ccpAtn':j[0x7]??0x0,'ccpEdn':j[0x8]??0x0,'ccpTxbx':j[0x9]??0x0,'ccpHdrTxbx':j[0xa]??0x0};}function Wt(h,j){const bH=bg,m=new w(h),p={'_pairs':[]},u=[];for(let v=0x0;v<j&&v*0x8+0x8<=h['length'];v+=0x1){const y=m['u32'](v*0x8),A=m['u32'](v*0x8+0x4),B=Lt[v]||'Field'+v;p['fc'+B]=y,p['lcb'+B]=A,u[bH(0x279)]({'name':B,'fc':y,'lcb':A,'index':v});}return p['_pairs']=u,p;}const l={'sprmCFRMarkDel':0x800,'sprmCFRMark':0x801,'sprmCFFldVanish':0x802,'sprmCPicLocation':0x6a03,'sprmCIbstRMark':0x4804,'sprmCDttmRMark':0x6805,'sprmCFData':0x806,'sprmCFOle2':0x80a,'sprmCHighlight':0x2a0c,'sprmCIstd':0x4a30,'sprmCPlain':0x2a33,'sprmCFBold':0x835,'sprmCFItalic':0x836,'sprmCFStrike':0x837,'sprmCFOutline':0x838,'sprmCFShadow':0x839,'sprmCFSmallCaps':0x83a,'sprmCFCaps':0x83b,'sprmCFVanish':0x83c,'sprmCKul':0x2a3e,'sprmCDxaSpace':0x8840,'sprmCIco':0x2a42,'sprmCHps':0x4a43,'sprmCHpsPos':0x4845,'sprmCSymbol':0x6a09,'sprmCHpsKern':0x484b,'sprmCRgFtc0':0x4a4f,'sprmCRgFtc1':0x4a50,'sprmCRgFtc2':0x4a51,'sprmCCharScale':0x4852,'sprmCFDStrike':0x2a53,'sprmCFImprint':0x854,'sprmCFSpec':0x855,'sprmCFObj':0x856,'sprmCFEmboss':0x858,'sprmCFBiDi':0x85a,'sprmCFBoldBi':0x85c,'sprmCFItalicBi':0x85d,'sprmCFtcBi':0x4a5e,'sprmCIcoBi':0x4a60,'sprmCHpsBi':0x4a61,'sprmPIstd':0x4600,'sprmPIstdPermute':0xc601,'sprmPIncLvl':0x2602,'sprmPJc80':0x2403,'sprmPFKeep':0x2405,'sprmPFKeepFollow':0x2406,'sprmPFPageBreakBefore':0x2407,'sprmPIlvl':0x260a,'sprmPIlfo':0x460b,'sprmPChgTabsPapx':0xc60d,'sprmPDxaRight80':0x840e,'sprmPDxaLeft80':0x840f,'sprmPNest80':0x4610,'sprmPDxaLeft180':0x8411,'sprmPDyaLine':0x6412,'sprmPDyaBefore':0xa413,'sprmPDyaAfter':0xa414,'sprmPChgTabs':0xc615,'sprmPFInTable':0x2416,'sprmPFTtp':0x2417,'sprmPDxaAbs':0x8418,'sprmPDyaAbs':0x8419,'sprmPDxaWidth':0x841a,'sprmPPc':0x261b,'sprmPWr':0x2423,'sprmPBrcTop80':0x6424,'sprmPBrcLeft80':0x6425,'sprmPBrcBottom80':0x6426,'sprmPBrcRight80':0x6427,'sprmPBrcBetween80':0x6428,'sprmPBrcBar80':0x6629,'sprmPWHeightAbs':0x442b,'sprmPDcs':0x442c,'sprmPShd80':0x442d,'sprmPDyaFromText':0x842e,'sprmPDxaFromText':0x842f,'sprmPFLocked':0x2430,'sprmPFWidowControl':0x2431,'sprmPFBiDi':0x2441,'sprmPHugePapx':0x6646,'sprmPFAdjustRight':0x2448,'sprmPItap':0x6649,'sprmPDtap':0x664a,'sprmPFInnerTableCell':0x244b,'sprmPFInnerTtp':0x244c,'sprmPShd':0xc64d,'sprmPBrcTop':0xc64e,'sprmPBrcLeft':0xc64f,'sprmPBrcBottom':0xc650,'sprmPBrcRight':0xc651,'sprmPBrcBetween':0xc652,'sprmPBrcBar':0xc653,'sprmPDxcRight':0x4455,'sprmPDxcLeft':0x4456,'sprmPDxcLeft1':0x4457,'sprmPDylBefore':0x4458,'sprmPDylAfter':0x4459,'sprmPFDyaBeforeAuto':0x245b,'sprmPFDyaAfterAuto':0x245c,'sprmPDxaRight':0x845d,'sprmPDxaLeft':0x845e,'sprmPNest':0x465f,'sprmPDxaLeft1':0x8460,'sprmPJc':0x2461,'sprmTJc90':0x5400,'sprmTDxaLeft':0x9601,'sprmTDxaGapHalf':0x9602,'sprmTFCantSplit90':0x3403,'sprmTTableHeader':0x3404,'sprmTTableBorders80':0xd605,'sprmTDyaRowHeight':0x9407,'sprmTDefTable':0xd608,'sprmTDefTableShd80':0xd609,'sprmTTlp':0x740a,'sprmTFBiDi':0x560b,'sprmTDefTableShd3rd':0xd60c,'sprmTPc':0x360d,'sprmTDxaAbs':0x940e,'sprmTDyaAbs':0x940f,'sprmTDxaFromText':0x9410,'sprmTDyaFromText':0x9411,'sprmTDefTableShd':0xd612,'sprmTTableBorders':0xd613,'sprmTTableWidth':0xf614,'sprmTFAutofit':0x3615,'sprmTWidthBefore':0xf617,'sprmTWidthAfter':0xf618,'sprmTSetBrc80':0xd620,'sprmTInsert':0x7621,'sprmTDelete':0x5622,'sprmTDxaCol':0x7623,'sprmTMerge':0x5624,'sprmTSplit':0x5625,'sprmTTextFlow':0x7629,'sprmTVertMerge':0xd62b,'sprmTVertAlign':0xd62c,'sprmTSetShd':0xd62d,'sprmTSetShdOdd':0xd62e,'sprmTSetBrc':0xd62f,'sprmTCellPadding':0xd632,'sprmTCellPaddingDefault':0xd633,'sprmTCellWidth':0xd635,'sprmTFitText':0xf636,'sprmTFCellNoWrap':0xd639,'sprmTIstd':0x563a},Ot=new Set([l[bg(0x270)],l[bg(0x2ca)],l['sprmTDefTable'],l[bg(0x234)],l['sprmTTableBorders'],l['sprmTDefTableShd'],l['sprmTDefTableShd80'],l['sprmTDefTableShd3rd'],l['sprmTSetBrc80'],l['sprmTSetBrc'],l['sprmTSetShd'],l[bg(0x1b3)],l['sprmTCellPadding'],l['sprmTCellPaddingDefault'],l['sprmTCellWidth'],l['sprmTVertAlign'],l[bg(0x29d)],l['sprmTTextFlow'],l[bg(0x1c8)]]);function Nt(h){return h>>0xd&0x7;}function k(h,i=0x0){return i+0x2>h['length']?0x0:(h[i]??0x0)|(h[i+0x1]??0x0)<<0x8;}function C(h,i=0x0){const j=k(h,i);return j>0x7fff?j-0x10000:j;}function ie(h,i=0x0){return i+0x4>h['length']?0x0:((h[i]??0x0)|(h[i+0x1]??0x0)<<0x8|(h[i+0x2]??0x0)<<0x10|(h[i+0x3]??0x0)<<0x18>>>0x0)>>>0x0;}function V(h,i=0x0){return{'first':h[i]??0x0,'lim':h[i+0x1]??0x0};}function $(h,i=0x0){if(i+0x4>h['length'])return null;const j=ie(h,i)>>>0x0,m=j&0xff,o=j>>0x8&0xff,p=j>>0x10&0xff;return{'raw':j,'lineWidth':m,'borderType':o,'color':p};}function Ut(h,i=0x0){const j=k(h,i);return{'raw':j,'horzMerge':j&0x3,'textFlow':j>>0x2&0x7,'vertMerge':j>>0x5&0x3,'vertAlign':j>>0x7&0x3,'ftsWidth':j>>0x9&0x7,'fitText':!!(j&0x1000),'noWrap':!!(j&0x2000),'hideMark':!!(j&0x4000)};}function je(h,i=0x0){return i+0x14>h['length']?null:{'tcgrf':Ut(h,i),'wWidth':k(h,i+0x2),'borders':{'top':$(h,i+0x4)||{},'left':$(h,i+0x8)||{},'bottom':$(h,i+0xc)||{},'right':$(h,i+0x10)||{}}};}function jt(h){const bI=bg;if(h[bI(0x2a7)]<0x3)return null;const i=k(h,0x0),j=h[0x2]??0x0;let m=0x3;const p=[];for(let v=0x0;v<j+0x1&&m+0x2<=h['length'];v+=0x1)p['push'](C(h,m)),m+=0x2;const u=[];for(let y=0x0;y<j&&m+0x14<=h['length'];y+=0x1){const A=je(h,m);A&&u['push'](A),m+=0x14;}return{'cb':i,'numberOfColumns':j,'rgdxaCenter':p,'cells':u};}function X(h){return h['length']?{'cb':h[0x0]??0x0,'range':V(h,0x1),'value':h[0x3]??0x0,'extra':h['subarray'](0x4)}:null;}function he(h){if(!h['length'])return null;const i=h[0x0]??0x0,j=k(h,0x4);return{'cb':i,'range':V(h,0x1),'ftsWidth':h[0x3]??0x0,'width':j,'wWidth':j};}function zt(h){return h['length']?{'cb':h[0x0]??0x0,'range':V(h,0x1),'border':$(h,0x3)||{},'extra':h['subarray'](0x7)}:null;}function ge(h){if(!h['length'])return null;const i=k(h,0x1);return{'ftsWidth':h[0x0]??0x0,'width':i,'wWidth':i};}function _t(h){const bJ=bg;if(!h['length'])return null;const i=h[0x0]??0x0,j=V(h,0x1),m=j['lim']-j['first'];let p=0x3;const u=[];for(let y=0x0;y<m&&p+0x2<=h[bJ(0x2a7)];y+=0x1)u[bJ(0x279)](C(h,p)),p+=0x2;const v=[];for(let A=0x0;A<m&&p+0x14<=h['length'];A+=0x1)v['push'](je(h,p)),p+=0x14;return{'cb':i,'range':j,'itcFirst':j[bJ(0x271)],'ctc':m,'dxaCol':u,'cells':v};}function Gt(h,i,j){const bK=bg,m=j>>0xd&0x7;if(i>=h['length'])return 0x0;if(j===l['sprmTDefTable']){const o=k(h,i);return o?o+0x1:0x0;}if(Ot[bK(0x19e)](j))return(h[i]??0x0)+0x1;switch(m){case 0x0:return 0x1;case 0x1:return 0x1;case 0x2:return 0x2;case 0x3:return 0x4;case 0x4:return 0x2;case 0x5:return 0x2;case 0x6:return(h[i]??0x0)+0x1;case 0x7:return 0x3;default:return 0x0;}}function x(h){return!!(h[0x0]??0x0);}function d(h,i,j,m,o){return{'kind':h,'name':i,'value':j,'raw':m,'operandBytes':o};}function qt(h,i){const bL=bg,j=Nt(h),m=i,p=h;switch(h){case l['sprmCPicLocation']:return d('char','pictureOffset',ie(m,0x0)>>>0x0,p,m);case l['sprmCFData']:return d(bL(0x263),'data',x(m),p,m);case l['sprmCFOle2']:return d('char','ole2',x(m),p,m);case l['sprmCIstd']:return d('char','charStyleId',k(m,0x0),p,m);case l['sprmCPlain']:return d(bL(0x263),bL(0x224),x(m),p,m);case l['sprmCFBold']:return d(bL(0x263),'bold',x(m),p,m);case l[bL(0x1a5)]:return d('char','italic',x(m),p,m);case l[bL(0x1d9)]:return d('char','strike',x(m),p,m);case l['sprmCFOutline']:return d('char','outline',x(m),p,m);case l[bL(0x1c1)]:return d('char','shadow',x(m),p,m);case l['sprmCFSmallCaps']:return d('char','smallCaps',x(m),p,m);case l['sprmCFCaps']:return d('char','caps',x(m),p,m);case l['sprmCFVanish']:return d('char','hidden',x(m),p,m);case l['sprmCKul']:return d('char','underline',m[0x0]??0x0,p,m);case l[bL(0x1b5)]:return d('char','spacing',C(m,0x0),p,m);case l['sprmCIco']:case l['sprmCIcoBi']:return d('char',bL(0x242),m[0x0]??0x0,p,m);case l['sprmCHighlight']:{const u=m[0x0]??0x0,v={'index':u,'color':Te[u]};return d('char','highlight',v,p,m);}case l['sprmCHps']:case l['sprmCHpsBi']:return d('char',bL(0x26d),k(m,0x0),p,m);case l['sprmCHpsPos']:return d('char','positionHalfPoints',C(m,0x0),p,m);case l['sprmCSymbol']:return d('char','symbol',{'font':k(m,0x0),'charCode':k(m,0x2)},p,m);case l[bL(0x200)]:case l['sprmCRgFtc1']:case l['sprmCRgFtc2']:case l['sprmCFtcBi']:return d('char',bL(0x248),k(m,0x0),p,m);case l['sprmCCharScale']:return d('char','scale',k(m,0x0),p,m);case l['sprmCFDStrike']:return d('char','doubleStrike',x(m),p,m);case l['sprmCFImprint']:return d('char','imprint',x(m),p,m);case l['sprmCFSpec']:return d(bL(0x263),'special',x(m),p,m);case l['sprmCFObj']:return d('char',bL(0x292),x(m),p,m);case l['sprmCFEmboss']:return d('char','emboss',x(m),p,m);case l['sprmCFBiDi']:return d('char','rtl',x(m),p,m);case l['sprmCFBoldBi']:return d('char',bL(0x1be),x(m),p,m);case l[bL(0x27a)]:return d('char','italicBi',x(m),p,m);case l['sprmPIstd']:return d('para','styleId',k(m,0x0),p,m);case l['sprmPJc80']:case l['sprmPJc']:return d(bL(0x203),'alignment',m[0x0]??0x0,p,m);case l[bL(0x211)]:return d('para','keepLines',x(m),p,m);case l['sprmPFKeepFollow']:return d('para','keepNext',x(m),p,m);case l['sprmPFPageBreakBefore']:return d('para','pageBreakBefore',x(m),p,m);case l['sprmPIlvl']:return d('para','listLevel',m[0x0]??0x0,p,m);case l['sprmPIlfo']:return d('para','listId',k(m,0x0),p,m);case l['sprmPDxaRight80']:case l['sprmPDxaRight']:return d('para','rightIndent',C(m,0x0),p,m);case l['sprmPDxaLeft80']:case l['sprmPDxaLeft']:return d('para','leftIndent',C(m,0x0),p,m);case l['sprmPDxaLeft180']:case l[bL(0x21d)]:return d('para','firstLineIndent',C(m,0x0),p,m);case l[bL(0x1f6)]:return d(bL(0x203),'lineSpacing',C(m,0x0),p,m);case l['sprmPDyaBefore']:return d('para',bL(0x2ac),C(m,0x0),p,m);case l['sprmPDyaAfter']:return d('para','spacingAfter',C(m,0x0),p,m);case l['sprmPFInTable']:return d('para','inTable',x(m),p,m);case l['sprmPFTtp']:return d('para','tableRowEnd',x(m),p,m);case l['sprmPDxaAbs']:return d('para','frameLeft',C(m,0x0),p,m);case l[bL(0x1eb)]:return d('para','frameTop',C(m,0x0),p,m);case l['sprmPDxaWidth']:return d(bL(0x203),bL(0x21b),C(m,0x0),p,m);case l['sprmPPc']:return d('para','framePosition',m[0x0]??0x0,p,m);case l['sprmPWr']:return d('para',bL(0x25c),m[0x0]??0x0,p,m);case l[bL(0x22a)]:case l[bL(0x257)]:return d(bL(0x203),bL(0x204),$(m,0x0),p,m);case l['sprmPBrcLeft80']:case l['sprmPBrcLeft']:return d('para',bL(0x23a),$(m,0x0),p,m);case l['sprmPBrcBottom80']:case l['sprmPBrcBottom']:return d('para','borderBottom',$(m,0x0),p,m);case l[bL(0x1d2)]:case l['sprmPBrcRight']:return d('para','borderRight',$(m,0x0),p,m);case l[bL(0x29e)]:case l['sprmPBrcBetween']:return d('para',bL(0x2c3),$(m,0x0),p,m);case l[bL(0x2d3)]:case l[bL(0x25b)]:return d('para','borderBar',$(m,0x0),p,m);case l['sprmPWHeightAbs']:return d('para','frameHeight',C(m,0x0),p,m);case l['sprmPShd80']:case l['sprmPShd']:return d('para','shading',m['slice'](),p,m);case l['sprmPDyaFromText']:return d('para',bL(0x215),C(m,0x0),p,m);case l['sprmPDxaFromText']:return d('para','distanceFromTextX',C(m,0x0),p,m);case l[bL(0x280)]:return d('para','locked',x(m),p,m);case l['sprmPFWidowControl']:return d('para',bL(0x1a9),x(m),p,m);case l['sprmPFBiDi']:return d('para',bL(0x2d1),x(m),p,m);case l['sprmPFAdjustRight']:return d('para','adjustRight',x(m),p,m);case l['sprmPItap']:return d('para','itap',ie(m,0x0),p,m);case l['sprmPDtap']:return d('para','dtap',ie(m,0x0),p,m);case l[bL(0x1e9)]:return d('para','innerTableCell',x(m),p,m);case l['sprmPFInnerTtp']:return d('para','innerTableRowEnd',x(m),p,m);case l['sprmPFDyaBeforeAuto']:return d('para','spacingBeforeAuto',x(m),p,m);case l['sprmPFDyaAfterAuto']:return d(bL(0x203),bL(0x1c5),x(m),p,m);case l['sprmTJc90']:return d('table','alignment',k(m,0x0),p,m);case l['sprmTDxaLeft']:return d('table','leftIndent',C(m,0x0),p,m);case l['sprmTDxaGapHalf']:return d('table','gapHalf',k(m,0x0),p,m);case l['sprmTFCantSplit90']:return d(bL(0x277),bL(0x27b),x(m),p,m);case l[bL(0x24b)]:return d(bL(0x277),'header',x(m),p,m);case l['sprmTDyaRowHeight']:return d('table','rowHeight',C(m,0x0),p,m);case l['sprmTDefTable']:return d('table','defTable',jt(m),p,m);case l[bL(0x258)]:return d('table','rtl',x(m),p,m);case l[bL(0x2d5)]:return d('table','positionCode',m[0x0]??0x0,p,m);case l['sprmTDxaAbs']:return d('table','absLeft',C(m,0x0),p,m);case l['sprmTDyaAbs']:return d('table',bL(0x269),C(m,0x0),p,m);case l['sprmTDxaFromText']:return d('table',bL(0x1f4),C(m,0x0),p,m);case l[bL(0x1db)]:return d('table','distanceTop',C(m,0x0),p,m);case l['sprmTTableWidth']:return d(bL(0x277),'tableWidth',ge(m),p,m);case l['sprmTFAutofit']:return d(bL(0x277),'autoFit',x(m),p,m);case l['sprmTWidthBefore']:return d('table','widthBefore',ge(m),p,m);case l['sprmTWidthAfter']:return d('table','widthAfter',ge(m),p,m);case l['sprmTInsert']:return d('table','insertCells',_t(m),p,m);case l['sprmTDelete']:return d('table',bL(0x207),V(m,0x0),p,m);case l['sprmTDxaCol']:return d(bL(0x277),bL(0x251),he(m),p,m);case l['sprmTMerge']:return d('table',bL(0x2bb),V(m,0x0),p,m);case l['sprmTSplit']:return d(bL(0x277),bL(0x1cf),V(m,0x0),p,m);case l[bL(0x217)]:return d('table','textFlow',X(m),p,m);case l['sprmTVertMerge']:return d('table','vertMerge',X(m),p,m);case l[bL(0x22d)]:return d('table','vertAlign',X(m),p,m);case l['sprmTSetShd']:case l['sprmTSetShdOdd']:return d(bL(0x277),bL(0x2bc),X(m),p,m);case l['sprmTSetBrc80']:case l['sprmTSetBrc']:return d('table','setBorder',zt(m),p,m);case l['sprmTCellPadding']:case l['sprmTCellPaddingDefault']:return d('table','cellPadding',he(m),p,m);case l['sprmTCellWidth']:return d(bL(0x277),'cellWidth',he(m),p,m);case l[bL(0x2a3)]:return d('table','fitText',X(m),p,m);case l['sprmTFCellNoWrap']:return d('table',bL(0x282),X(m),p,m);case l['sprmTIstd']:return d('table','styleId',k(m,0x0),p,m);default:return{'kind':j===0x1?bL(0x203):j===0x2?'char':j===0x5?'table':bL(0x28e),'name':bL(0x275)+h[bL(0x231)](0x10),'value':m,'raw':h,'operandBytes':m};}}function ae(h,i,j){const m=[];let p=i;for(;p+0x2<=j;){const u=k(h,p);p+=0x2;const v=Gt(h,p,u);if(!v||p+v>j)break;const y=h['subarray'](p,p+v);p+=v,m['push'](qt(u,y));}return m;}function ze(h,j,m){const bM=bg;if(j==null||m==null||m<=0x0)return{'aFC':[],'pages':[]};const u=h['subarray'](j,j+m),v=new w(u),y=Math['floor']((m-0x4)/0x8);if(y<=0x0)return{'aFC':[],'pages':[]};const A=[];for(let E=0x0;E<=y;E+=0x1)A[bM(0x279)](v['u32'](E*0x4)>>>0x0);const B=[],D=(y+0x1)*0x4;for(let F=0x0;F<y;F+=0x1)B['push'](v['u32'](D+F*0x4)&0x3fffff);return{'aFC':A,'pages':B};}function Vt(h,j){const bN=bg,m=j*0x200,v=h[bN(0x1f0)](m,m+0x200);if(v['length']<0x200)return null;const y=new w(v),A=y['u8'](0x1ff);if(!A||A>0x64)return null;const B=[];for(let G=0x0;G<=A;G+=0x1)B['push'](y['u32'](G*0x4)>>>0x0);const D=[],E=[],F=(A+0x1)*0x4;for(let H=0x0;H<A;H+=0x1){const I=y['u8'](F+H);D['push'](I),E[bN(0x279)](I?m+I*0x2:0x0);}return{'crun':A,'rgfc':B,'rgb':D,'chpxOffsets':E};}function Kt(h,j){const bO=bg,m=j*0x200,v=h['subarray'](m,m+0x200);if(v['length']<0x200)return null;const y=new w(v),A=y['u8'](0x1ff);if(A>0x1d)return null;const B=[];for(let G=0x0;G<=A;G+=0x1)B['push'](y['u32'](G*0x4)>>>0x0);const D=(A+0x1)*0x4,E=[],F=[];for(let H=0x0;H<A;H+=0x1){const I=y['u8'](D+H*0xd);E['push'](I),F[bO(0x279)](I?m+I*0x2:0x0);}return{'cpara':A,'rgfc':B,'bOffsets':E,'papxOffsets':F};}function Xt(j,m,v,A){const bP=bg,B=v['fibRgFcLcb']['fcPlcfBteChpx'],D=v['fibRgFcLcb'][bP(0x28c)],E=ze(m,B,D),F=[];for(const G of E['pages']){const H=Vt(j,G);if(H)for(let I=0x0;I<H['crun'];I+=0x1){const K=H['rgfc'][I]??0x0,M=H['rgfc'][I+0x1]??K,O=fe(A,K),P=fe(A,M);if(O==null||P==null||P<=O)continue;const Q=H[bP(0x287)][I]?Yt(j,H['chpxOffsets'][I]):[];F['push']({'cpStart':O,'cpEnd':P,'fcStart':K,'fcEnd':M,'properties':Q});}}return F['sort']((R,S)=>R['cpStart']-S['cpStart']||R['cpEnd']-S['cpEnd']),F;}function Jt(j,m,v,A){const bQ=bg,B=v[bQ(0x222)]['fcPlcfBtePapx'],D=v['fibRgFcLcb']['lcbPlcfBtePapx'],E=ze(m,B,D),F=[];for(const G of E['pages']){const H=Kt(j,G);if(H)for(let I=0x0;I<H[bQ(0x210)];I+=0x1){const K=H[bQ(0x1a8)][I]??0x0,M=H['rgfc'][I+0x1]??K,O=fe(A,K),P=fe(A,M);if(O==null||P==null||P<O)continue;const Q=H['papxOffsets'][I]?Zt(j,H['papxOffsets'][I]):{'styleId':0x0,'properties':[]};F['push']({'cpStart':O,'cpEnd':P,'fcStart':K,'fcEnd':M,'styleId':Q['styleId'],'properties':Q['properties'],'rawOffset':H['papxOffsets'][I]??0x0});}}return F['sort']((R,S)=>R['cpStart']-S['cpStart']||R[bQ(0x25f)]-S['cpEnd']),F;}function Yt(h,i){if(i==null||i<0x0||i>=h['length'])return[];const j=h[i]??0x0;if(!j)return[];const m=i+0x1,o=Math['min'](h['length'],m+j);return ae(h,m,o);}function Zt(h,j){const bR=bg;if(j==null||j<0x0||j>=h['length'])return{'styleId':0x0,'properties':[]};const m=new w(h),u=m['u8'](j);if(u===0x0&&!m[bR(0x1d7)](j+0x1,0x1))return{'styleId':0x0,'properties':[]};let v,y;if(u===0x0?(y=m['u8'](j+0x1)*0x2,v=j+0x2):(y=u-0x1,v=j+0x1),y<0x2||!m['ensure'](v,Math['max'](0x2,y)))return{'styleId':0x0,'properties':[]};const A=m['u16'](v),B=v+0x2,D=Math['min'](h['length'],v+y),E=ae(h,B,D);return{'styleId':A,'properties':E};}function Qt(h,i){const bS=bg;let j=i;for(;j+0x1<h['length']&&!(h[j]===0x0&&h[j+0x1]===0x0);)j+=0x2;return{'value':new TextDecoder(bS(0x278))['decode'](h['subarray'](i,j)),'nextOffset':Math['min'](h['length'],j+0x2)};}function er(j,m){const bT=bg;if(!j['length'])return null;const v=new w(j),y=v['u8'](0x0),A=v['u8'](0x1),B=v['u16'](0x2),D=v['u8'](0x4),E=v['u8'](0x5),F=v[bT(0x1ab)](0x6,0xa),G=v['slice'](0x10,0x18),H=0x28;let I='',K='';if(j['length']>H){const M=new TextDecoder(bT(0x278))['decode'](j['subarray'](H))['split']('\x00')['filter'](Boolean);if(I=M[0x0]||'',K=M[0x1]||'',!K&&E){const O=H+E*0x2;O+0x2<=j['length']&&(K=Qt(j,O)['value']);}}return{'index':m,'cbFfnM1':y,'ffid':A,'weight':B,'charset':D,'ixchSzAlt':E,'panose':F,'fontSignature':G,'name':I,'altName':K};}function tr(j,m){const bU=bg,u=m['fcSttbfFfn'],v=m[bU(0x1e3)];if(u==null||v==null||v<=0x0)return{'header':null,'fonts':[],'byIndex'(H){return H==null,null;}};const A=j[bU(0x1f0)](u,u+v),B=new w(A),D=B[bU(0x219)](0x0),E=B['u16'](0x2);let F=0x4;const G=[];for(let H=0x0;H<D&&F<A['length'];H+=0x1){const I=B['u8'](F)+0x1,K=A[bU(0x1f0)](F,Math['min'](F+I,A['length'])),M=er(K,H);M&&G['push'](M),F+=I+E;}return{'header':{'cData':D,'cbExtra':E},'fonts':G,'byIndex'(O){return O==null||O<0x0?null:G[O]||null;}};}function _e(h,i,j=0x0){const bV=bg;if(j+i['length']>h['length'])return!0x1;for(let m=0x0;m<i[bV(0x2a7)];m+=0x1)if(h[j+m]!==i[m])return!0x1;return!0x0;}function rr(h){const i=[{'mime':'image/png','magic':[0x89,0x50,0x4e,0x47],'end':nr},{'mime':'image/jpeg','magic':[0xff,0xd8,0xff],'end':ar},{'mime':'image/gif','magic':[0x47,0x49,0x46,0x38],'end':sr},{'mime':'image/bmp','magic':[0x42,0x4d],'end':or},{'mime':'image/tiff','magic':[0x49,0x49,0x2a,0x0],'end':null},{'mime':'image/tiff','magic':[0x4d,0x4d,0x0,0x2a],'end':null},{'mime':'image/emf','magic':[0x1,0x0,0x0,0x0],'end':cr},{'mime':'image/wmf','magic':[0xd7,0xcd,0xc6,0x9a],'end':null}];for(let j=0x0;j<h['length']-0x4;j+=0x1)for(const m of i)if(_e(h,m['magic'],j)){const o=m['end']?m['end'](h,j):h['length'];return{'mime':m['mime'],'start':j,'end':o||h['length']};}return null;}function nr(h,i){for(let j=i+0x8;j+0x8<h['length'];j+=0x1)if(_e(h,[0x49,0x45,0x4e,0x44],j))return j+0x8;return h['length'];}function ar(h,i){const bW=bg;for(let j=i+0x2;j+0x1<h['length'];j+=0x1)if(h[j]===0xff&&h[j+0x1]===0xd9)return j+0x2;return h[bW(0x2a7)];}function sr(h,i){const bX=bg;for(let j=i+0x6;j<h[bX(0x2a7)];j+=0x1)if(h[j]===0x3b)return j+0x1;return h[bX(0x2a7)];}function or(h,i){const bY=bg;if(i+0x6<=h['length']){const j=new w(h['subarray'](i))['u32'](0x2);if(j>0x0&&i+j<=h[bY(0x2a7)])return i+j;}return h['length'];}function cr(h,i){const bZ=bg;if(i+0x30<=h['length']){const j=new w(h['subarray'](i))[bZ(0x228)](0x28);if(j>0x0&&i+j<=h['length'])return i+j;}return h['length'];}function ir(j,m,v={}){const c0=bg;if(!j||m==null||m<0x0||m+0x44>j['length'])return null;const y=new w(j),A=y['i32'](m),B=y['u16'](m+0x4),D=A>0x0&&m+A<=j['length']?A:Math[c0(0x2a0)](j[c0(0x2a7)]-m,v[c0(0x23e)]||0x8*0x400*0x400),E=j['subarray'](m,m+D),F=Math['min'](B||0x44,E['length']),G=rr(E['subarray'](F));if(!G)return{'id':W('asset-img'),'type':'image','mime':'application/octet-stream','bytes':E,'dataUrl':pe(E,'application/octet-stream'),'meta':{'pictureOffset':m,'lcb':A,'cbHeader':B}};const H=F+G[c0(0x1d3)],I=Math['min'](F+G['end'],E['length']),K=E[c0(0x1f0)](H,I);return{'id':W('asset-img'),'type':'image','mime':G['mime'],'bytes':K,'dataUrl':pe(K,G[c0(0x2d6)]),'meta':{'pictureOffset':m,'lcb':A,'cbHeader':B}};}function xe(h,i){let j=i;for(;j<h['length']&&h[j]!==0x0;)j+=0x1;return{'value':new TextDecoder('windows-1252')['decode'](h['subarray'](i,j)),'nextOffset':j+0x1};}function lr(h){const j=new w(h),m=[0x4,0x6];for(const u of m)try{let v=u;const y=xe(h,v);v=y['nextOffset'];const A=xe(h,v);v=A['nextOffset'];const B=xe(h,v);if(v=B['nextOffset'],v+0x4>h['length'])continue;const D=j['u32'](v);if(v+=0x4,D>0x0&&v+D<=h['length']){const E=h['subarray'](v,v+D);return{'label':y['value'],'originalPath':A['value'],'tempPath':B['value'],'dataSize':D,'bytes':E};}}catch{}return null;}function pr(h,j){const c1=bg,m=h['listChildren'](j)['filter'](E=>E['objectType']===0x2||E[c1(0x1de)]===0x5),v=new Map(m['map'](E=>[E['name']['toLowerCase'](),E])),y=v['get']('\x03objinfo')||v['get']('\x03objinfo')||v['get'](String['fromCharCode'](0x3)+c1(0x221)),A=v['get']('\x01ole10native')||v['get']('\x01ole10native')||v['get'](String['fromCharCode'](0x1)+c1(0x288)),B=v['get']('package')||v['get'](c1(0x28d))||v['get']('content'),D={'entry':j,'streams':m,'displayName':j[c1(0x1b7)],'attachment':null,'objectData':null};if(A){const E=h['getStream'](A)||new Uint8Array(0x0),F=lr(E);if(F){const G=F[c1(0x1f1)]||F['originalPath'][c1(0x1cf)](/[\\/]/)['pop']()||j['name']+'.bin',H={'id':W('asset-ole'),'type':c1(0x2ae),'name':G,'mime':c1(0x25e),'bytes':F[c1(0x1a1)],'dataUrl':pe(F[c1(0x1a1)],c1(0x25e)),'meta':F};return D['attachment']=H,D;}}if(B){const I=h['getStream'](B)||new Uint8Array(0x0),K={'id':W('asset-pkg'),'type':'attachment','name':Oe(j['name'])+c1(0x212),'mime':'application/octet-stream','bytes':I,'dataUrl':pe(I,'application/octet-stream'),'meta':{'stream':B[c1(0x1b7)]}};D['attachment']=K;}return y&&(D['objectData']=h['getStream'](y)||new Uint8Array(0x0)),D;}function fr(h){const c2=bg,i=h['getEntry'](c2(0x2ce));if(!i)return new Map();const j=h[c2(0x27d)](i)['filter'](o=>o['objectType']===0x1),m=new Map();for(const o of j)m['set'](o['name'],pr(h,o));return m;}function be(h){const c3=bg,i={'bold':!0x1,'italic':!0x1,'strike':!0x1,'underline':0x0,'fontSizeHalfPoints':void 0x0,'fontFamilyId':void 0x0,'colorIndex':void 0x0,'highlight':void 0x0,'spacing':0x0,'positionHalfPoints':0x0,'scale':0x64,'hidden':!0x1,'smallCaps':!0x1,'caps':!0x1,'outline':!0x1,'shadow':!0x1,'emboss':!0x1,'imprint':!0x1,'rtl':!0x1,'pictureOffset':void 0x0,'data':!0x1,'ole2':!0x1,'object':!0x1,'special':!0x1,'charStyleId':void 0x0};for(const j of h||[])switch(j['name']){case'plain':j['value']&&(i['bold']=!0x1,i['italic']=!0x1,i['strike']=!0x1,i['underline']=0x0,i[c3(0x2b6)]=!0x1,i[c3(0x206)]=!0x1);break;case c3(0x1ca):case'italic':case'strike':case c3(0x1fa):case c3(0x2b6):case'caps':case'outline':case'shadow':case'emboss':case'imprint':case'rtl':case'data':case'ole2':case'object':case'special':i[j['name']]=!!j[c3(0x232)];break;case'underline':i['underline']=j['value']??0x0;break;case c3(0x26d):i[c3(0x26d)]=j['value'];break;case c3(0x248):i['fontFamilyId']=j['value'];break;case'colorIndex':i['colorIndex']=j['value'];break;case c3(0x2a6):i['highlight']=j['value'];break;case'spacing':i['spacing']=j['value']||0x0;break;case'positionHalfPoints':i['positionHalfPoints']=j['value']||0x0;break;case'scale':i['scale']=j['value']||0x64;break;case'pictureOffset':i['pictureOffset']=j['value'];break;case'charStyleId':i['charStyleId']=j['value'];break;default:i[j['name']]=j['value'];break;}return i;}function dr(h){const c4=bg,i={'styleId':0x0,'alignment':0x0,'spacingBefore':0x0,'spacingAfter':0x0,'lineSpacing':0x0,'leftIndent':0x0,'rightIndent':0x0,'firstLineIndent':0x0,'keepLines':!0x1,'keepNext':!0x1,'pageBreakBefore':!0x1,'widowControl':!0x1,'inTable':!0x1,'tableRowEnd':!0x1,'innerTableCell':!0x1,'innerTableRowEnd':!0x1,'itap':0x0,'dtap':0x0,'listLevel':void 0x0,'listId':void 0x0,'rtlPara':!0x1,'adjustRight':!0x1,'frameLeft':void 0x0,'frameTop':void 0x0,'frameWidth':void 0x0,'frameHeight':void 0x0,'framePosition':void 0x0,'frameWrap':void 0x0,'borders':{},'shading':void 0x0};for(const j of h||[])switch(j['name']){case c4(0x2cb):i['styleId']=j['value']||0x0;break;case c4(0x241):i['alignment']=j['value']??0x0;break;case'spacingBefore':i[c4(0x2ac)]=j['value']||0x0;break;case c4(0x1e5):i['spacingAfter']=j['value']||0x0;break;case'lineSpacing':i[c4(0x272)]=j['value']||0x0;break;case'leftIndent':i['leftIndent']=j['value']||0x0;break;case c4(0x239):i['rightIndent']=j['value']||0x0;break;case'firstLineIndent':i['firstLineIndent']=j['value']||0x0;break;case'keepLines':case'keepNext':case'pageBreakBefore':case c4(0x1a9):case'inTable':case'tableRowEnd':case'innerTableCell':case'innerTableRowEnd':case'rtlPara':case c4(0x246):i[j['name']]=!!j['value'];break;case'itap':i['itap']=j['value']||0x0;break;case'dtap':i['dtap']=j['value']||0x0;break;case'listLevel':i[c4(0x2d0)]=j[c4(0x232)];break;case c4(0x2af):i['listId']=j['value'];break;case c4(0x2a5):i['frameLeft']=j['value'];break;case'frameTop':i[c4(0x20d)]=j[c4(0x232)];break;case'frameWidth':i[c4(0x21b)]=j['value'];break;case'frameHeight':i['frameHeight']=j['value'];break;case'framePosition':i[c4(0x1b0)]=j['value'];break;case c4(0x25c):i['frameWrap']=j['value'];break;case'borderTop':i['borders'][c4(0x1b9)]=j['value'];break;case'borderLeft':i['borders']['left']=j['value'];break;case'borderBottom':i['borders']['bottom']=j['value'];break;case c4(0x230):i['borders']['right']=j['value'];break;case'borderBetween':i['borders'][c4(0x1c9)]=j['value'];break;case'borderBar':i['borders']['bar']=j['value'];break;case'shading':i['shading']=j[c4(0x232)];break;default:i[j['name']]=j['value'];break;}return i;}function de(h){const c5=bg,i={'styleId':void 0x0,'alignment':0x0,'leftIndent':0x0,'gapHalf':0x0,'cantSplit':!0x1,'header':!0x1,'rowHeight':0x0,'rtl':!0x1,'positionCode':void 0x0,'absLeft':void 0x0,'absTop':void 0x0,'distanceLeft':void 0x0,'distanceTop':void 0x0,'tableWidth':void 0x0,'autoFit':void 0x0,'widthBefore':void 0x0,'widthAfter':void 0x0,'defTable':void 0x0,'operations':[]};for(const j of h||[])switch(j['name']){case'styleId':i['styleId']=j['value'];break;case'alignment':i['alignment']=j[c5(0x232)]??0x0;break;case'leftIndent':i['leftIndent']=j['value']||0x0;break;case c5(0x2b9):i[c5(0x2b9)]=j['value']||0x0;break;case'cantSplit':case'header':case'rtl':i[j[c5(0x1b7)]]=!!j[c5(0x232)];break;case'rowHeight':i['rowHeight']=j['value']||0x0;break;case c5(0x21f):i['positionCode']=j['value'];break;case c5(0x1df):i['absLeft']=j['value'];break;case'absTop':i['absTop']=j['value'];break;case'distanceLeft':i['distanceLeft']=j[c5(0x232)];break;case'distanceTop':i['distanceTop']=j['value'];break;case'tableWidth':i['tableWidth']=j['value'];break;case'autoFit':i['autoFit']=j['value'];break;case'widthBefore':i['widthBefore']=j['value'];break;case'widthAfter':i[c5(0x294)]=j[c5(0x232)];break;case'defTable':i['defTable']=j['value'];break;default:i[c5(0x289)]['push'](j);break;}return i;}function Se(h){return h?.['inTable']?Math['max'](0x1,h['itap']||0x0||(h['dtap']?h['dtap']:0x1)):0x0;}function ur(h){return At[h]||'left';}function mr(h){const c6=bg;return Dt[h]||(h?'single':c6(0x1fe));}function hr(h){return Mt[h]||'top';}function N(h,i,j){if(!i)return;const m=Math['max'](0x0,i['first']||0x0),o=Math['max'](m,i['lim']||m);for(let p=m;p<o&&p<h['length'];p+=0x1)j(h[p],p);}function gr(h){const c7=bg,i=h?.[c7(0x291)];if(!i||!Array['isArray'](i[c7(0x1bb)]))return[];const j=i['cells']['map']((m,o)=>({'index':o,'width':m?.['wWidth'],'ftsWidth':m?.['tcgrf']?.['ftsWidth'],'borders':m?.[c7(0x2cd)]||{},'merge':m?.['tcgrf']?.['horzMerge']||0x0,'vertMerge':m?.['tcgrf']?.['vertMerge']||0x0,'vertAlign':m?.['tcgrf']?.['vertAlign']||0x0,'fitText':!!m?.['tcgrf']?.['fitText'],'noWrap':!!m?.['tcgrf']?.['noWrap'],'hideMark':!!m?.['tcgrf']?.[c7(0x284)],'textFlow':m?.[c7(0x250)]?.['textFlow']||0x0,'rightBoundary':i[c7(0x1e8)]?.[o+0x1],'leftBoundary':i['rgdxaCenter']?.[o]}));for(const m of h['operations']||[])switch(m['name']){case'merge':N(j,m['value'],(p,u)=>{const v=m['value'];u===v['first']?p['merge']=0x2:p['merge']=0x1;});break;case c7(0x1cf):N(j,m['value'],o=>{o['merge']=0x0;});break;case'cellWidth':case'columnWidth':N(j,m['value']['range'],o=>{const c8=c7,p=m['value'];o['width']=p['width'],o[c8(0x1ed)]=p['ftsWidth'];});break;case c7(0x267):N(j,m['value'][c7(0x1c0)],o=>{const c9=c7;o[c9(0x267)]=m['value'][c9(0x232)];});break;case c7(0x1ef):N(j,m['value'][c7(0x1c0)],o=>{o['vertAlign']=m['value']['value'];});break;case'setBorder':N(j,m['value'][c7(0x1c0)],o=>{const ca=c7;o[ca(0x2cd)]={...o['borders']||{},'all':m['value']['border']};});break;case'setShading':N(j,m[c7(0x232)]['range'],o=>{const cb=c7;o['shading']=m[cb(0x232)]['value'];});break;case'fitText':N(j,m['value'][c7(0x1c0)],o=>{o['fitText']=!!m['value']['value'];});break;case'cellNoWrap':N(j,m[c7(0x232)]['range'],o=>{const cc=c7;o[cc(0x223)]=!!m['value']['value'];});break;case'textFlow':N(j,m['value']['range'],o=>{o['textFlow']=m['value']['value'];});break;}return j;}function J(...h){const cd=bg,i=new Map();for(const j of h)for(const m of j||[])i['set'](m[cd(0x2b1)]+':'+m['name'],m);return Array['from'](i['values']());}function xr(h){const cf=bg,i={'para':[],'char':[],'table':[]};for(const j of h||[])j['kind']==='para'?i['para']['push'](j):j['kind']==='char'?i['char']['push'](j):j[cf(0x2b1)]==='table'&&i['table'][cf(0x279)](j);return i;}function br(h,i){const j=new w(h),m=j['u16'](i),p=i+0x2,u=m*0x2,v=j['utf16le'](p,u),y=p+u+0x2;return{'value':v['replace'](/\u0000+$/,''),'nextOffset':y};}function wr(h,i){const cg=bg,j=new w(h),m=j[cg(0x219)](i),o=j['u16'](i+0x2),p=j['u16'](i+0x4);return{'sti':m&0xfff,'flags1':m>>0xc,'stk':o&0xf,'istdBase':o>>0x4&0xfff,'cupx':p&0xf,'istdNext':p>>0x4&0xfff,'bchUpe':j['u16'](i+0x6),'grfstd':j[cg(0x219)](i+0x8)};}function Me(h,j){const m=new w(h)['u16'](j),n=j+0x2,p=n+m,u=h['subarray'](n,Math['min'](p,h['length']));let v=0x0,y=[];return u['length']>=0x2&&(v=u[0x0]|(u[0x1]??0x0)<<0x8,y=ae(u,0x2,u['length'])),{'cbUpx':m,'styleId':v,'properties':y,'nextOffset':te(p)};}function we(h,i){const j=new w(h)['u16'](i),m=i+0x2,n=m+j,p=h['subarray'](m,Math['min'](n,h['length'])),u=ae(p,0x0,p['length']);return{'cbUpx':j,'properties':u,'nextOffset':te(n)};}function yr(h,i){const ch=bg,j=new w(h)['u16'](i),m=i+0x2,n=m+j,p=h[ch(0x1f0)](m,Math['min'](n,h[ch(0x2a7)])),u=ae(p,0x0,p['length']);return{'cbUpx':j,'properties':u,'nextOffset':te(n)};}function Pr(h,j,m){const ci=bg;if(!h['length'])return{'istd':m,'empty':!0x0,'name':'','stdfBase':{'istdBase':0xfff,'istdNext':0x0,'stk':0x1,'cupx':0x0},'paraProps':[],'charProps':[],'tableProps':[]};const u=Math[ci(0x2b0)](0xa,Math['min'](j||0xa,h['length'])),v=wr(h,0x0);let y=u;const A=br(h,y);y=A['nextOffset'];let B=[],D=[],E=[];try{if(v['stk']===0x1){if(v[ci(0x262)]>=0x1&&y+0x2<=h['length']){const F=Me(h,y);B=F[ci(0x29f)],y=F[ci(0x25a)];}v['cupx']>=0x2&&y+0x2<=h['length']&&(D=we(h,y)['properties']);}else{if(v['stk']===0x2)y+0x2<=h[ci(0x2a7)]&&(D=we(h,y)['properties']);else{if(v['stk']===0x3){if(v['cupx']>=0x1&&y+0x2<=h['length']){const G=yr(h,y);E=G[ci(0x29f)],y=G['nextOffset'];}if(v['cupx']>=0x2&&y+0x2<=h['length']){const H=Me(h,y);B=H['properties'],y=H['nextOffset'];}v['cupx']>=0x3&&y+0x2<=h['length']&&(D=we(h,y)['properties']);}}}}catch{}return{'istd':m,'name':A['value'],'stdfBase':v,'paraProps':B,'charProps':D,'tableProps':E,'empty':!0x1};}function Tr(j,m){const cj=bg,v=m['fcStshf'],A=m[cj(0x23b)];if(v==null||A==null||A<=0x0)return{'styles':new Map(),'header':null,'resolveStyle'(a3){return Ce(new Map(),a3);}};const F=j['subarray'](v,v+A),G=new w(F),H=G['u16'](0x0),K=0x2,M=G['u16'](K+0x0),P=G['u16'](K+0x2),Q=G['u16'](K+0xa),S=G['u16'](K+0xc),Z=G['u16'](K+0xe),a0={'cbStshi':H,'cstd':M,'cbSTDBaseInFile':P,'ftcAsci':Q,'ftcFE':S,'ftcOther':Z};let a1=0x2+H;const a2=new Map();for(let a3=0x0;a3<M&&a1+0x2<=F['length'];a3+=0x1){const a4=G['u16'](a1),a5=a1+0x2,a6=a5+a4;if(a4===0x0){a2['set'](a3,{'istd':a3,'empty':!0x0,'name':'','stdfBase':{'istdBase':0xfff,'istdNext':0x0,'stk':0x1,'cupx':0x0},'paraProps':[],'charProps':[],'tableProps':[]}),a1=te(a6);continue;}const a7=F['subarray'](a5,Math['min'](a6,F['length'])),a8=Pr(a7,P,a3);a2['set'](a3,a8),a1=te(a6);}return{'header':a0,'styles':a2,'resolveStyle'(a9){return Ce(a2,a9);}};}function Ce(h,i,j=new Set()){const ck=bg;if(i==null||i===0xfff||j['has'](i))return{'paraProps':[],'charProps':[],'tableProps':[],'styleIds':[]};const m=h[ck(0x2c5)](i);if(!m||m['empty'])return{'paraProps':[],'charProps':[],'tableProps':[],'styleIds':[]};j['add'](i);const o=Ce(h,m[ck(0x22c)]?.['istdBase'],j);return{'styleIds':[...o['styleIds'],i],'paraProps':J(o['paraProps'],m['paraProps']),'charProps':J(o['charProps'],m['charProps']),'tableProps':J(o[ck(0x23f)],m['tableProps'])};}function Sr(h,i,j,m){const cl=bg;let p=m?.['index']||0x0;for(;p<h['length']&&h[p][cl(0x25f)]<=i;)p+=0x1;m&&(m['index']=p);const u=[];let v=p;for(;v<h['length']&&h[v]['cpStart']<j;)h[v][cl(0x25f)]>i&&u['push'](h[v]),v+=0x1;return u;}function Cr(h){const cm=bg;return String(h||'')[cm(0x1b8)]();}function Le(h){const cn=bg,i=String(h||'')['replace'](/[\r\n\t]+/g,'\x20')['replace'](/\s+/g,'\x20')[cn(0x1b8)]();if(!i)return null;const j=i['toUpperCase']();if(j['startsWith']('HYPERLINK')){const m=i['slice'](0x9)['trim'](),o=m[cn(0x2c1)](/"([^"]+)"/)?.[0x1]||m['split'](/\s+/)[0x0]||'';return o?{'type':cn(0x1ec),'href':o}:null;}if(j['startsWith']('INCLUDEPICTURE')){const p=i['slice'](0xe)['trim']();return{'type':'includePicture','target':p['match'](/"([^"]+)"/)?.[0x1]||p['split'](/\s+/)[0x0]||''};}return j['startsWith']('EMBED')?{'type':cn(0x1dc),'raw':i}:j['startsWith']('LINK')?{'type':cn(0x285),'raw':i}:{'type':'unknown','raw':i};}function vr(h,i){const co=bg;if(!i['text'])return;const j=h[h['length']-0x1];if(j&&j['type']==='text'&&j[co(0x1c4)]===i['href']&&Ne(j['style'],i['style'])){j['text']+=i[co(0x1d0)];return;}h['push'](i);}function q(h,i,j){const cp=bg;if(!j)return;const m=h[cp(0x2a7)]?h[h['length']-0x1][cp(0x226)]:i;j['type']==='text'?vr(m,j):m['push'](j);}function Br(h,i){const cq=bg,j=['_'+i,'_'+String(i),'_'+i['toString'](0x10),'_'+i['toString'](0x10)['toUpperCase']()];for(const m of j)if(h[cq(0x19e)](m))return h['get'](m)||null;return null;}function kr(h,i,j,m,o,p={}){return function(v){const cs=b,y=v?.['pictureOffset'];if(y==null)return null;if(o['has'](y))return o['get'](y)||null;let A=null;const B=Br(i,y);if((v[cs(0x2aa)]||v['object']||v[cs(0x22b)])&&B?.['attachment']&&(A=B['attachment'],m['add'](B['entry']['name'])),!A&&h?.['length']){const D=ir(h,y,p);D&&D[cs(0x2d6)]!==cs(0x25e)?A=D:!A&&B?.['attachment']?(A=B['attachment'],m['add'](B['entry'][cs(0x1b7)])):D&&(A=D);}return!A&&B?.['attachment']&&(A=B['attachment'],m[cs(0x1e4)](B[cs(0x20e)][cs(0x1b7)])),A&&j['push'](A),o['set'](y,A),A;};}function Fr(h){switch(h){case L['nonBreakingHyphen']:return'-';case L['nonRequiredHyphen']:return'';case L['annotationRef']:return'';default:return h;}}function Ir(h,j){const cu=bg,m=[],u=[];for(const v of h)if(!(!v['text']||v['state']['hidden']))for(const y of v['text']){const A=Fr(y);if(A===L['fieldStart']){u['push']({'instruction':'','parsed':null,'readingInstruction':!0x0,'nodes':[]});continue;}if(A===L['fieldSeparator']){const D=u[u[cu(0x2a7)]-0x1];D&&(D[cu(0x236)]=Le(D['instruction']),D['readingInstruction']=!0x1);continue;}if(A===L['fieldEnd']){const E=u['pop']();if(!E)continue;let F=E['nodes'];if(E['readingInstruction']&&(E['parsed']=Le(E['instruction'])),E['parsed']?.['type']==='hyperlink'){const G=E[cu(0x236)]['href'];F=F[cu(0x1e7)](H=>H['type']==='lineBreak'||H['type']==='pageBreak'?H:{...H,'href':G});}for(const H of F)q(u,m,H);continue;}const B=u[u['length']-0x1];if(B?.[cu(0x266)]){B[cu(0x2b2)]+=A;continue;}if(A===L[cu(0x286)]){q(u,m,{'type':'lineBreak'});continue;}if(A===L[cu(0x26f)]){q(u,m,{'type':'pageBreak'});continue;}if(A===L['picture']){const I=j(v['state']);I?.[cu(0x25d)]==='image'?q(u,m,{'type':'image','asset':I,'style':v['state']}):I?.[cu(0x25d)]==='attachment'&&q(u,m,{'type':'attachment','asset':I,'style':v[cu(0x233)]});continue;}q(u,m,{'type':cu(0x1d0),'text':pt(A),'style':v['state']});}for(;u['length'];){const K=u[cu(0x23c)]();for(const M of K['nodes'])q(u,m,M);}return m;}function Er(j,m,v,A,F,G,P){const cv=bg,Q=Sr(v,j['cpStart'],j['cpEnd'],P),S=new Set([j['cpStart'],j['cpEnd']]);for(const a1 of Q)S['add'](Math[cv(0x2b0)](j['cpStart'],a1['cpStart'])),S['add'](Math['min'](j['cpEnd'],a1['cpEnd']));const Z=Array['from'](S)['sort']((a2,a3)=>a2-a3),a0=[];for(let a2=0x0;a2<Z['length']-0x1;a2+=0x1){const a3=Z[a2],a4=Z[a2+0x1];if(a4<=a3)continue;const a5=Q['find'](ag=>ag['cpStart']<=a3&&ag['cpEnd']>=a4)?.['properties']||[],a6=be(a5),a7=a6['charStyleId']!=null?A['resolveStyle'](a6['charStyleId'])[cv(0x2be)]:[],a8=J(F,a7,a5),a9=be(a8),aa=G(a9['fontFamilyId']);aa&&(a9['fontFamily']=aa['name']||aa['altName']||void 0x0);const ab=a3-j['cpStart'],ac=a4-j['cpStart'],ad=m['slice'](ab,ac);if(!ad)continue;const af=a0[a0['length']-0x1];if(af&&Ne(af['state'],a9)){af[cv(0x1d0)]+=ad,af['cpEnd']=a4;continue;}a0['push']({'cpStart':a3,'cpEnd':a4,'text':ad,'state':a9});}if(!a0['length']&&m){const ag=be(F),ah=G(ag['fontFamilyId']);ah&&(ag['fontFamily']=ah['name']||ah[cv(0x1ce)]||void 0x0),a0['push']({'cpStart':j[cv(0x244)],'cpEnd':j['cpEnd'],'text':m,'state':ag});}return a0;}function Dr(j,m,v,A,E,F,G){const cw=bg,H=xr(j['properties']||[]),K=j['styleId']||H[cw(0x203)]['find'](a3=>a3['name']==='styleId')?.['value']||0x0,M=v['resolveStyle'](K),O=J(M['paraProps'],H[cw(0x203)]),P=dr(O),Q=de(H['table']),R=Q['styleId']!=null?v['resolveStyle'](Q[cw(0x2cb)])['tableProps']:[],S=J(R,H['table']),Z=de(S),a0=M['charProps'],a1=Er(j,m,E,v,a0,a3=>A['byIndex'](a3),G),a2=Ir(a1,F);return{'id':W(cw(0x203)),'cpStart':j[cw(0x244)],'cpEnd':j['cpEnd'],'terminator':j['terminator']||'','text':m,'rawProperties':j['properties']||[],'styleId':K,'styleName':Cr(v['styles']['get'](K)?.['name']),'paraProps':O,'paraState':P,'tableProps':S,'tableState':Z,'segments':a1,'inlines':a2};}function Ar(h){const cx=bg;for(const j of h)for(let m=0x0;m<j['cells']['length'];m+=0x1){const p=j['cells'][m],u=p['meta']?.['merge']||0x0;if(p['colIndex']=m,p['colspan']=0x1,p['rowspan']=0x1,p['hidden']=!0x1,u===0x1){p['hidden']=!0x0;continue;}if(u>0x1){let v=m+0x1;for(;v<j['cells'][cx(0x2a7)]&&(j['cells'][v]['meta']?.['merge']||0x0)===0x1;)j[cx(0x1bb)][v]['hidden']=!0x0,p['colspan']+=0x1,v+=0x1;}}for(let y=0x0;y<h[cx(0x2a7)];y+=0x1){const A=h[y];for(const B of A['cells']){if(B['hidden'])continue;const D=B['meta']?.[cx(0x267)]||0x0;if(D===0x1){B[cx(0x1fa)]=!0x0;continue;}if(D>0x1){let E=y+0x1;for(;E<h['length'];){let F=!0x0;for(let G=B['colIndex']||0x0;G<(B['colIndex']||0x0)+(B[cx(0x28b)]||0x1);G+=0x1){const H=h[E]['cells'][G];if(!H||(H['meta']?.['vertMerge']||0x0)!==0x1){F=!0x1;break;}}if(!F)break;for(let I=B['colIndex']||0x0;I<(B['colIndex']||0x0)+(B['colspan']||0x1);I+=0x1)h[E]['cells'][I]['hidden']=!0x0;B['rowspan']=(B['rowspan']||0x1)+0x1,E+=0x1;}}}}}function ve(h){const cy=bg;return{'type':cy(0x252),'id':h['id'],'styleId':h['styleId'],'styleName':h['styleName'],'paraState':h[cy(0x249)],'inlines':h[cy(0x201)],'text':h['text']};}function Mr(h){const cz=bg,j=[];let m={'cells':[]},p=[];for(const y of h)if(p['push'](y),y['terminator']===L['cellMark']&&(m['cells'][cz(0x279)]({'id':W('cell'),'paragraphs':p[cz(0x1e7)](ve),'meta':null}),p=[],y[cz(0x249)]['tableRowEnd']||y[cz(0x249)]['innerTableRowEnd'])){const A=gr(y['tableState']);for(;A[cz(0x2a7)]&&m['cells']['length']>A['length']&&m['cells'][m['cells']['length']-0x1][cz(0x235)]['every'](D=>!D['text']&&!(D['inlines']||[])['length']);)m[cz(0x1bb)][cz(0x23c)]();m['cells'][cz(0x297)]((D,E)=>{D['meta']=A[E]||{'index':E};});const B=A['length']?(A[A['length']-0x1][cz(0x237)]||0x0)-(A[0x0][cz(0x1a2)]||0x0):0x0;j['push']({'id':W('row'),'cells':m['cells'],'state':y['tableState'],'gridWidthTwips':B}),m={'cells':[]};}p['length']&&m[cz(0x1bb)]['push']({'id':W('cell'),'paragraphs':p['map'](ve),'meta':null}),m['cells']['length']&&j['push']({'id':W('row'),'cells':m['cells'],'state':h[0x0]?.['tableState']||de([]),'gridWidthTwips':0x0}),Ar(j);const u=j[cz(0x24e)](D=>D['gridWidthTwips'])?.[cz(0x260)]||0x0,v=Math['max'](...h['map'](D=>Se(D['paraState'])),0x1);return{'type':'table','id':W('table'),'depth':v,'rows':j,'state':j[0x0]?.['state']||de([]),'gridWidthTwips':u};}function Lr(h){const cA=bg,i=[];let j=0x0;for(;j<h['length'];){const m=h[j];if(Se(m[cA(0x249)])<=0x0){i[cA(0x279)](ve(m)),j+=0x1;continue;}const o=[];for(;j<h['length']&&Se(h[j][cA(0x249)])>0x0;)o['push'](h[j]),j+=0x1;i['push'](Mr(o));}return i;}function Rr(j,m={}){const cB=bg,v=[],A=yt(j,m);v['push'](...A['warnings']||[]);const E=A['getStream']('/WordDocument');if(!E)throw new Error('Missing\x20WordDocument\x20stream');const F=Rt(E);if(F['base']['wIdent']!==0xa5ec&&ce(v,'Unexpected\x20FIB\x20identifier:\x200x'+F['base']['wIdent'][cB(0x231)](0x10)),F[cB(0x1a6)]['fEncrypted'])throw new Error('Encrypted\x20.doc\x20files\x20are\x20not\x20supported\x20yet');const G=A['getStream'](F['base']['fWhichTblStm']?'/1Table':'/0Table');if(!G)throw new Error('Missing\x20table\x20stream');const P=A[cB(0x2c8)]('/Data')||new Uint8Array(0x0),Q=vt(G,F['fibRgFcLcb']),Z=Ft(E,Q),a0=Z['join'](''),a1=F['fibRgLw']['ccpText']>0x0?F['fibRgLw']['ccpText']:a0['length'],a2=Tr(G,F['fibRgFcLcb']),a3=tr(G,F['fibRgFcLcb']),a4=Xt(E,G,F,Q)['filter'](ag=>ag['cpStart']<a1),a5=Jt(E,G,F,Q)[cB(0x256)](ag=>ag['cpStart']<a1)['map'](ag=>({...ag,'cpEnd':Math['min'](ag['cpEnd'],a1)})),a6=a5['length']?a5[cB(0x1e7)](ag=>({'cpStart':ag[cB(0x244)],'cpEnd':ag['cpEnd'],'terminator':a0[ag['cpEnd']-0x1]||'','styleId':ag['styleId'],'properties':ag['properties']})):Et(a0['slice'](0x0,a1))['map'](ag=>({...ag,'styleId':0x0,'properties':[]})),a7=fr(A),a8=[],a9=new Set(),aa=kr(P,a7,a8,a9,new Map(),m),ab={'index':0x0},ac=a6[cB(0x1e7)](ag=>{const cC=cB,ah=It(E,Q,Z,ag['cpStart'],ag['cpEnd']),ai=ag['terminator']===L['paragraph']||ag[cC(0x205)]===L['cellMark']?ag['terminator']:'',aj=ai&&ah['endsWith'](ai)?ah['slice'](0x0,-0x1):ah;return Dr({...ag,'terminator':ai},aj,a2,a3,a4,aa,ab);}),ad=Lr(ac),af=Array[cB(0x1dd)](a7['values']())['filter'](ag=>ag?.['attachment']&&!a9[cB(0x19e)](ag[cB(0x20e)]['name']))['map'](ag=>ag['attachment']);for(const ag of af)a8['push'](ag);return af[cB(0x2a7)]&&ad['push']({'type':'attachments','id':W('attachments'),'items':af}),{'kind':'msdoc','version':0x1,'warnings':v,'meta':{'fib':{'wIdent':F[cB(0x1a6)]['wIdent'],'nFib':F[cB(0x1a6)]['nFib'],'fWhichTblStm':F['base'][cB(0x2a8)],'fComplex':F['base']['fComplex'],'fEncrypted':F['base']['fEncrypted'],'ccpText':F['fibRgLw']['ccpText']},'counts':{'paragraphs':ac['length'],'blocks':ad[cB(0x2a7)],'assets':a8[cB(0x2a7)],'styles':a2['styles']['size'],'fonts':a3['fonts']['length']}},'fonts':a3['fonts'],'styles':Array[cB(0x1dd)](a2['styles'][cB(0x2a9)]())['map'](ah=>({'istd':ah['istd'],'name':ah['name'],'type':ah[cB(0x22c)]?.['stk'],'basedOn':ah['stdfBase']?.['istdBase'],'next':ah[cB(0x22c)]?.['istdNext']})),'blocks':ad,'assets':a8};}const re={0x1:bg(0x2c9),0x2:'#0000ff',0x3:bg(0x2d2),0x4:'#00ff00',0x5:'#ff00ff',0x6:'#ff0000',0x7:'#ffff00',0x8:'#ffffff',0x9:'#000080',0xa:'#008080',0xb:'#008000',0xc:'#800080',0xd:'#800000',0xe:'#808000',0xf:'#808080',0x10:'#c0c0c0'};function ne(h){return Object['entries'](h)['filter'](([,i])=>i!=null&&i!=='')['map'](([i,j])=>i+':'+j)['join'](';');}function _(h){const cD=bg;if(!h)return null;const i=Math['max'](0x1,Math[cD(0x29a)]((h['lineWidth']??0x8)/0x8*1.3333)),j=h['borderType'],m=j===0x6?'double':j===0x3?'dotted':j===0x2?'dashed':cD(0x20f),o=h['color'],p=o&&re[o]||'#666';return i+'px\x20'+m+'\x20'+p;}function Hr(h){const cE=bg,j={'text-align':ur(h[cE(0x241)])},m=z(h['spacingBefore']),v=z(h[cE(0x1e5)]),y=z(h['leftIndent']),A=z(h[cE(0x239)]),B=z(h[cE(0x1ba)]);if(m&&(j[cE(0x1cb)]=m+'px'),v&&(j[cE(0x1cc)]=v+'px'),y&&(j['margin-left']=y+'px'),A&&(j[cE(0x265)]=A+'px'),B&&(j['text-indent']=B+'px'),h['lineSpacing']){const H=Math['abs'](h['lineSpacing'])/0xf0;H&&(j['line-height']=String(Math['max'](0x1,H)));}h['keepLines']&&(j[cE(0x24a)]='avoid'),h['keepNext']&&(j['break-after']='avoid'),h['pageBreakBefore']&&(j['break-before']='page'),h['rtlPara']&&(j['direction']='rtl');const D=_(h['borders']?.['top']),E=_(h['borders']?.['right']),F=_(h['borders']?.['bottom']),G=_(h['borders']?.['left']);return D&&(j['border-top']=D),E&&(j['border-right']=E),F&&(j['border-bottom']=F),G&&(j['border-left']=G),j;}function $r(h){const cF=bg,i=mr(h);if(!h||i==='none')return{};const j={'text-decoration-line':'underline'};return i==='double'||i==='wavy-double'?j['text-decoration-style']='double':i['includes']('dot')||i==='dotted-heavy'?j[cF(0x1d6)]='dotted':i['includes']('dash')?j['text-decoration-style']='dashed':i['includes'](cF(0x2ab))||i['includes'](cF(0x21a))?j['text-decoration-style']='wavy':j['text-decoration-style']=cF(0x20f),j;}function Ge(h){const cG=bg,i={};(h['bold']||h['boldBi'])&&(i['font-weight']='700'),(h['italic']||h['italicBi'])&&(i['font-style']='italic'),(h['strike']||h['doubleStrike'])&&(i['text-decoration-line']=(i['text-decoration-line']?i['text-decoration-line']+'\x20':'')+'line-through'),Object['assign'](i,$r(h[cG(0x22f)])),h['fontSizeHalfPoints']&&(i['font-size']=h['fontSizeHalfPoints']/0x2+'pt'),h['fontFamily']&&(i['font-family']='\x27'+String(h[cG(0x27f)])[cG(0x227)](/'/g,'\x5c\x27')+cG(0x1f7)),h['colorIndex']&&re[h[cG(0x242)]]&&(i['color']=re[h['colorIndex']]);const j=typeof h['highlight']==cG(0x2c6)?h['highlight']:h['highlight']?.['index'];return j&&Te[j]&&(i[cG(0x295)]=Te[j]),h[cG(0x2b6)]&&(i[cG(0x29b)]='small-caps'),h['caps']&&(i['text-transform']='uppercase'),h['scale']&&h['scale']!==0x64&&(i[cG(0x1ff)]=cG(0x2bf),i[cG(0x1da)]=cG(0x208)+h['scale']/0x64+')',i[cG(0x27c)]='left\x20center'),h['positionHalfPoints']>0x0&&(i['vertical-align']='super'),h['positionHalfPoints']<0x0&&(i['vertical-align']='sub'),h['outline']&&(i['text-shadow']='0\x200\x200.02em\x20currentColor'),(h['shadow']||h['emboss']||h['imprint'])&&(i['text-shadow']=i['text-shadow']?i['text-shadow']+cG(0x20c):'0.06em\x200.06em\x200.08em\x20rgba(0,0,0,.25)'),h['rtl']&&(i['direction']=cG(0x1ac)),i;}function Wr(h){const cH=bg,i=U(h[cH(0x1d0)]),j=Ge(h['style']);j['white-space']='break-spaces';const m=ne(j),o='<span'+(m?'\x20style=\x22'+m+'\x22':'')+'>'+i+'</span>';return h[cH(0x1c4)]?'<a\x20class=\x22msdoc-link\x22\x20href=\x22'+U(h['href'])+'\x22\x20target=\x22_blank\x22\x20rel=\x22noreferrer\x20noopener\x22>'+o+'</a>':o;}function Or(h){const cI=bg,i=Ge(h['style']);i['max-width']=cI(0x26c),i[cI(0x276)]='auto';const j='<img\x20class=\x22msdoc-image\x22\x20src=\x22'+U(h['asset']['dataUrl'])+'\x22\x20alt=\x22\x22\x20style=\x22'+ne(i)+'\x22>';return h[cI(0x1c4)]?'<a\x20class=\x22msdoc-link\x22\x20href=\x22'+U(h[cI(0x1c4)])+'\x22\x20target=\x22_blank\x22\x20rel=\x22noreferrer\x20noopener\x22>'+j+'</a>':j;}function Nr(h){const cJ=bg,i=U(h['asset']['name']||cJ(0x1ad)),j=cJ(0x255)+U(h['asset']['dataUrl'])+'\x22\x20download=\x22'+i+'\x22>📎\x20'+i+'</a>';return h['href']?'<a\x20class=\x22msdoc-link\x22\x20href=\x22'+U(h['href'])+'\x22\x20target=\x22_blank\x22\x20rel=\x22noreferrer\x20noopener\x22>'+j+'</a>':j;}function Ur(h){const cK=bg;return h[cK(0x1e7)](i=>i[cK(0x25d)]==='text'?Wr(i):i['type']==='image'?Or(i):i['type']==='attachment'?Nr(i):i['type']==='lineBreak'?'<br>':i[cK(0x25d)]==='pageBreak'?'<span\x20class=\x22msdoc-page-break\x22></span>':'')['join']('');}function qe(h,i={}){const cL=bg,j=i['inline']?cL(0x1d4):'p',m=ne(Hr(h['paraState'])),p=Ur(h['inlines']||[])||'<br>',u=[cL(0x1bd)];return h['styleName']&&u['push']('msdoc-style-'+Oe(h['styleName'])),'<'+j+'\x20class=\x22'+u['join']('\x20')+'\x22'+(m?'\x20style=\x22'+m+'\x22':'')+'>'+p+'</'+j+'>';}function jr(h){const cM=bg,j={},m=h['meta']?.['rightBoundary']!=null&&h['meta']?.['leftBoundary']!=null?h['meta']['rightBoundary']-h['meta']['leftBoundary']:h['meta']?.['width'],u=z(m);u&&(j['width']=u+'px'),h['meta']?.['noWrap']&&(j['white-space']='nowrap'),h['meta']?.['fitText']&&(j['text-align']='justify'),h['meta']?.['vertAlign']!=null&&(j['vertical-align']=hr(h['meta']['vertAlign']));const v=_(h['meta']?.[cM(0x2cd)]?.['all']),y=_(h['meta']?.['borders']?.['top'])||v,A=_(h['meta']?.['borders']?.['right'])||v,B=_(h['meta']?.[cM(0x2cd)]?.['bottom'])||v,D=_(h['meta']?.['borders']?.[cM(0x26e)])||v;y&&(j[cM(0x27e)]=y),A&&(j['border-right']=A),B&&(j[cM(0x296)]=B),D&&(j[cM(0x26a)]=D);const E=typeof h[cM(0x24d)]?.['shading']=='object'&&h['meta']?.['shading']&&'color'in h['meta']['shading']?h['meta'][cM(0x2ba)]['color']:void 0x0;return E&&re[E]&&(j['background-color']=re[E]),j;}function zr(h){const cN=bg,i={},j=z(h['gridWidthTwips']||h['state']?.[cN(0x21c)]?.['wWidth']);j?i['width']=j+'px':i[cN(0x1b6)]='100%';const m=z(h['state']?.['leftIndent']);return m&&(i['margin-left']=m+'px'),i['border-collapse']=cN(0x1af),i[cN(0x225)]='fixed',i;}function _r(h){const i=h['rows']['map'](j=>{const cO=b,m=j['state']?.[cO(0x1f5)]?z(Math['abs'](j['state']['rowHeight'])):null,o=m?'\x20style=\x22height:'+m+cO(0x2b3):'',p=j[cO(0x1bb)]['filter'](u=>!u['hidden'])['map'](u=>{const cP=cO,v=[];(u[cP(0x28b)]??0x1)>0x1&&v['push']('\x20colspan=\x22'+u['colspan']+'\x22'),(u[cP(0x1f8)]??0x1)>0x1&&v['push'](cP(0x238)+u['rowspan']+'\x22');const y=ne(jr(u)),A=u['paragraphs']['map'](B=>qe(B,{'inline':!0x0}))['join']('');return'<td\x20class=\x22msdoc-cell\x22'+v[cP(0x293)]('')+(y?'\x20style=\x22'+y+'\x22':'')+'>'+(A||'<div\x20class=\x22msdoc-paragraph\x22><br></div>')+'</td>';})['join']('');return'<tr\x20class=\x22msdoc-row\x22'+o+'>'+p+cO(0x2b7);})['join']('');return'<table\x20class=\x22msdoc-table\x20msdoc-table-depth-'+h['depth']+'\x22\x20style=\x22'+ne(zr(h))+'\x22><tbody>'+i+'</tbody></table>';}function Gr(h){const cQ=bg;return'<section\x20class=\x22msdoc-attachments\x22><div\x20class=\x22msdoc-attachments-title\x22>Embedded\x20attachments</div><ul>'+h[cQ(0x1fc)][cQ(0x1e7)](i=>cQ(0x245)+U(i['dataUrl'])+'\x22\x20download=\x22'+U(i['name']||'embedded-file')+'\x22>📎\x20'+U(i['name']||'embedded-file')+'</a></li>')['join']('')+'</ul></section>';}function Ve(){return'\x0a.msdoc-root{box-sizing:border-box;max-width:100%;padding:24px;background:#fff;color:#111;font:14px/1.6\x20-apple-system,BlinkMacSystemFont,\x22Segoe\x20UI\x22,sans-serif}\x0a.msdoc-root\x20*{box-sizing:border-box}\x0a.msdoc-paragraph{margin:0\x200\x208px;white-space:normal;word-break:break-word;overflow-wrap:anywhere}\x0a.msdoc-paragraph:last-child{margin-bottom:0}\x0a.msdoc-table{margin:12px\x200;border-collapse:collapse;border-spacing:0;max-width:100%}\x0a.msdoc-cell{padding:6px\x208px;vertical-align:top;word-break:break-word;overflow-wrap:anywhere}\x0a.msdoc-link{color:#1a73e8;text-decoration:none}\x0a.msdoc-link:hover{text-decoration:underline}\x0a.msdoc-image{display:inline-block;vertical-align:middle}\x0a.msdoc-attachment{display:inline-flex;align-items:center;gap:6px;padding:4px\x208px;border:1px\x20solid\x20#d0d7de;border-radius:6px;background:#f6f8fa;color:#0969da;text-decoration:none}\x0a.msdoc-attachments{margin-top:20px;padding-top:12px;border-top:1px\x20solid\x20#e5e7eb}\x0a.msdoc-attachments-title{font-weight:600;margin-bottom:8px}\x0a.msdoc-page-break{display:block;height:0;border-top:1px\x20dashed\x20#cbd5e1;margin:16px\x200}\x0a';}function qr(h,i={}){const cR=bg,j=i['css']??Ve();return{'html':h['blocks']['map'](m=>m[cR(0x25d)]==='paragraph'?qe(m):m['type']==='table'?_r(m):m['type']==='attachments'?Gr(m):'')['join'](''),'css':j,'warnings':h['warnings']||[],'meta':h['meta'],'assets':h['assets']||[],'parsed':h};}async function Vr(h){const cS=bg;if(h instanceof ArrayBuffer)return h;if(ArrayBuffer['isView'](h)){const i=new Uint8Array(h['byteLength']);return i['set'](new Uint8Array(h['buffer'],h[cS(0x1bc)],h['byteLength'])),i['buffer'];}if(typeof Blob<'u'&&h instanceof Blob)return await h['arrayBuffer']();if(typeof h==cS(0x1fb)){const j=await fetch(h);if(!j['ok'])throw new Error('Failed\x20to\x20fetch\x20document:\x20'+j['status']);return await j['arrayBuffer']();}throw new TypeError('Unsupported\x20input\x20type');}async function Kr(h,i={}){const cT=bg,j=await Vr(h);if(i['workerClient'])return i['workerClient'][cT(0x1d8)](j,{'parseOptions':i['parseOptions']||{},'renderOptions':i['renderOptions']||{}});const m=Rr(j,i['parseOptions']||{});return qr(m,i['renderOptions']||{});}const Ke='<span\x20class=\x22msdoc-page-break\x22></span>',Xr='<p\x20class=\x22msdoc-paragraph\x22><br></p>',ee={'width':0x31a,'height':0x463},Jr='\x0a.msdoc-stage{\x0a\x20\x20box-sizing:border-box;\x0a\x20\x20min-height:100%;\x0a\x20\x20padding:32px\x2024px\x2048px;\x0a\x20\x20background:#ececec;\x0a\x20\x20display:flex;\x0a\x20\x20flex-direction:column;\x0a\x20\x20align-items:center;\x0a\x20\x20gap:24px;\x0a}\x0a.msdoc-page{\x0a\x20\x20width:min(100%,794px);\x0a\x20\x20box-sizing:border-box;\x0a}\x0a.msdoc-page\x20>\x20.msdoc-root{\x0a\x20\x20box-sizing:border-box;\x0a\x20\x20width:100%;\x0a\x20\x20max-width:none;\x0a\x20\x20min-height:1123px;\x0a\x20\x20padding:clamp(24px,7%,96px)\x20clamp(20px,6%,88px);\x0a\x20\x20background:#fff;\x0a\x20\x20border:1px\x20solid\x20#d9d9d9;\x0a\x20\x20box-shadow:0\x201px\x203px\x20rgba(0,0,0,0.08),\x200\x2012px\x2032px\x20rgba(0,0,0,0.12);\x0a\x20\x20overflow-wrap:anywhere;\x0a}\x0a/*\x20表格不能沿用正文的\x20anywhere\x20断词,否则旧\x20DOC\x20的列宽和单元格内容会被过度压缩。\x20*/\x0a.msdoc-page\x20.msdoc-table{\x0a\x20\x20display:table;\x0a\x20\x20width:auto;\x0a\x20\x20max-width:100%;\x0a\x20\x20table-layout:auto!important;\x0a\x20\x20border-collapse:collapse;\x0a\x20\x20border-spacing:0;\x0a}\x0a.msdoc-page\x20.msdoc-table\x20tbody,\x0a.msdoc-page\x20.msdoc-table\x20tr{\x0a\x20\x20width:auto;\x0a}\x0a.msdoc-page\x20.msdoc-cell{\x0a\x20\x20min-width:1.5em;\x0a\x20\x20padding:4px\x206px;\x0a\x20\x20vertical-align:top;\x0a\x20\x20word-break:normal;\x0a\x20\x20overflow-wrap:normal;\x0a\x20\x20white-space:normal;\x0a}\x0a.msdoc-page\x20.msdoc-cell\x20.msdoc-paragraph{\x0a\x20\x20margin:0\x200\x204px;\x0a\x20\x20word-break:normal;\x0a\x20\x20overflow-wrap:break-word;\x0a}\x0a.msdoc-page\x20.msdoc-cell\x20.msdoc-paragraph:last-child{\x0a\x20\x20margin-bottom:0;\x0a}\x0a.msdoc-page\x20.msdoc-cell\x20span{\x0a\x20\x20white-space:normal!important;\x0a}\x0a.msdoc-page\x20.msdoc-page-break{\x0a\x20\x20display:none;\x0a}\x0a@media\x20(max-width:\x20860px){\x0a\x20\x20.msdoc-stage{\x0a\x20\x20\x20\x20padding:16px\x2012px\x2024px;\x0a\x20\x20\x20\x20gap:16px;\x0a\x20\x20}\x0a\x20\x20.msdoc-page{\x0a\x20\x20\x20\x20width:100%;\x0a\x20\x20}\x0a\x20\x20.msdoc-page\x20>\x20.msdoc-root{\x0a\x20\x20\x20\x20min-height:auto;\x0a\x20\x20\x20\x20padding:24px\x2020px;\x0a\x20\x20\x20\x20box-shadow:none;\x0a\x20\x20}\x0a}\x0a';function Yr(h){return h['replace'](/<(p|table|section)([^>]*?)style="([^"]*?\bbreak-before\s*:\s*page;?[^"]*?)"([^>]*)>/gi,i=>''+Ke+i);}function Zr(h){const cU=bg;return'<div\x20class=\x22msdoc-stage\x22>'+Yr(h)['split'](Ke)[cU(0x1e7)](i=>'<section\x20class=\x22msdoc-page\x22><div\x20class=\x22msdoc-root\x22>'+(i||Xr)+'</div></section>')['join']('')+'</div>';}function Qr(h){const cV=bg,i=h[cV(0x28a)](!0x0);return i['querySelectorAll']('.msdoc-stage,\x20.msdoc-page,\x20.msdoc-root')['forEach'](j=>{const cW=cV;j['style']['height']='auto',j[cW(0x1d5)]['maxHeight']='none',j['style']['overflow']='visible';}),i['querySelectorAll']('.msdoc-page')['forEach'](j=>{const cX=cV;g(j,ee,{'heightMode':cX(0x2a0)});const m=j['querySelector'](cX(0x1c3));m&&(m['style']['width']=f(ee['width']),m['style']['maxWidth']='none',m['style'][cX(0x1c2)]=f(ee['height']),m['style']['height']='auto',m['style']['boxShadow']='none',m['style']['border']='0',m['style']['overflow']=cX(0x1fd));}),i['innerHTML'];}function en(){return c({'selector':'.viewer-export-content\x20.msdoc-page','width':ee['width'],'height':ee['height'],'heightMode':'min'});}async function nn(h,i,j){const cY=bg,m=await Kr(h,{'renderOptions':{'css':Ve()+'\x0a'+Jr}});return i['innerHTML']='<style\x20data-msdoc>'+m[cY(0x2d7)]+'</style>'+Zr(m[cY(0x2cc)]),j?.['registerExportAdapter']?.({'includeDocumentStyles':!0x1,'printStyle':en,'toHtml':()=>Qr(i)}),{'$el':i,'unmount'(){j?.['registerExportAdapter']?.(null),i['innerHTML']='';}};}export{nn as renderDoc,rn as renderDocx};
|
|
1
|
+
const bw=b;(function(m,n){const b2=b,o=m();while(!![]){try{const p=-parseInt(b2(0x1bd))/0x1+parseInt(b2(0x10e))/0x2+parseInt(b2(0x114))/0x3*(parseInt(b2(0x205))/0x4)+-parseInt(b2(0xf1))/0x5*(-parseInt(b2(0x19a))/0x6)+-parseInt(b2(0x14f))/0x7*(-parseInt(b2(0x103))/0x8)+parseInt(b2(0x1c0))/0x9*(-parseInt(b2(0xfe))/0xa)+parseInt(b2(0x1e2))/0xb*(-parseInt(b2(0x11e))/0xc);if(p===n)break;else o['push'](o['shift']());}catch(r){o['push'](o['shift']());}}}(a,0x70517));import{b as c,g as d,f as e,a as h}from'./printLayout.js';import{b as i,u as k,c as l}from'./index7.js';import'vue';const Dl='KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBRbj10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9O2Z1bmN0aW9uIFhzKHIpe3JldHVybiByJiZyLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLCJkZWZhdWx0Iik/ci5kZWZhdWx0OnJ9ZnVuY3Rpb24gTWgocil7aWYoci5fX2VzTW9kdWxlKXJldHVybiByO3ZhciBlPXIuZGVmYXVsdDtpZih0eXBlb2YgZT09ImZ1bmN0aW9uIil7dmFyIHQ9ZnVuY3Rpb24gbigpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbj9SZWZsZWN0LmNvbnN0cnVjdChlLGFyZ3VtZW50cyx0aGlzLmNvbnN0cnVjdG9yKTplLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07dC5wcm90b3R5cGU9ZS5wcm90b3R5cGV9ZWxzZSB0PXt9O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmtleXMocikuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsbik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbixzLmdldD9zOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByW25dfX0pfSksdH1mdW5jdGlvbiBXbihyKXt0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBkeW5hbWljYWxseSByZXF1aXJlICInK3IrJyIuIFBsZWFzZSBjb25maWd1cmUgdGhlIGR5bmFtaWNSZXF1aXJlVGFyZ2V0cyBvci9hbmQgaWdub3JlRHluYW1pY1JlcXVpcmVzIG9wdGlvbiBvZiBAcm9sbHVwL3BsdWdpbi1jb21tb25qcyBhcHByb3ByaWF0ZWx5IGZvciB0aGlzIHJlcXVpcmUgY2FsbCB0byB3b3JrLicpfXZhciBaYT17ZXhwb3J0czp7fX07LyohCgoJSlNaaXAgdjMuMTAuMSAtIEEgSmF2YVNjcmlwdCBjbGFzcyBmb3IgZ2VuZXJhdGluZyBhbmQgcmVhZGluZyB6aXAgZmlsZXMKCTxodHRwOi8vc3R1YXJ0ay5jb20vanN6aXA+CgoJKGMpIDIwMDktMjAxNiBTdHVhcnQgS25pZ2h0bGV5IDxzdHVhcnQgW2F0XSBzdHVhcnRrLmNvbT4KCUR1YWwgbGljZW5jZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIG9yIEdQTHYzLiBTZWUgaHR0cHM6Ly9yYXcuZ2l0aHViLmNvbS9TdHVrL2pzemlwL21haW4vTElDRU5TRS5tYXJrZG93bi4KCglKU1ppcCB1c2VzIHRoZSBsaWJyYXJ5IHBha28gcmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIDoKCWh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvcGFrby9ibG9iL21haW4vTElDRU5TRQoJKi8oZnVuY3Rpb24ocixlKXsoZnVuY3Rpb24odCl7ci5leHBvcnRzPXQoKX0pKGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIHQobixzLGkpe2Z1bmN0aW9uIGEobCxBKXtpZighc1tsXSl7aWYoIW5bbF0pe3ZhciBkPXR5cGVvZiBXbj09ImZ1bmN0aW9uIiYmV247aWYoIUEmJmQpcmV0dXJuIGQobCwhMCk7aWYobylyZXR1cm4gbyhsLCEwKTt2YXIgZz1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitsKyInIik7dGhyb3cgZy5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixnfXZhciBmPXNbbF09e2V4cG9ydHM6e319O25bbF1bMF0uY2FsbChmLmV4cG9ydHMsZnVuY3Rpb24oQyl7dmFyIHA9bltsXVsxXVtDXTtyZXR1cm4gYShwfHxDKX0sZixmLmV4cG9ydHMsdCxuLHMsaSl9cmV0dXJuIHNbbF0uZXhwb3J0c31mb3IodmFyIG89dHlwZW9mIFduPT0iZnVuY3Rpb24iJiZXbix1PTA7dTxpLmxlbmd0aDt1KyspYShpW3VdKTtyZXR1cm4gYX0oezE6W2Z1bmN0aW9uKHQsbixzKXt2YXIgaT10KCIuL3V0aWxzIiksYT10KCIuL3N1cHBvcnQiKSxvPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSI7cy5lbmNvZGU9ZnVuY3Rpb24odSl7Zm9yKHZhciBsLEEsZCxnLGYsQyxwLGI9W10sbT0wLEU9dS5sZW5ndGgsdz1FLE49aS5nZXRUeXBlT2YodSkhPT0ic3RyaW5nIjttPHUubGVuZ3RoOyl3PUUtbSxkPU4/KGw9dVttKytdLEE9bTxFP3VbbSsrXTowLG08RT91W20rK106MCk6KGw9dS5jaGFyQ29kZUF0KG0rKyksQT1tPEU/dS5jaGFyQ29kZUF0KG0rKyk6MCxtPEU/dS5jaGFyQ29kZUF0KG0rKyk6MCksZz1sPj4yLGY9KDMmbCk8PDR8QT4+NCxDPTE8dz8oMTUmQSk8PDJ8ZD4+Njo2NCxwPTI8dz82MyZkOjY0LGIucHVzaChvLmNoYXJBdChnKStvLmNoYXJBdChmKStvLmNoYXJBdChDKStvLmNoYXJBdChwKSk7cmV0dXJuIGIuam9pbigiIil9LHMuZGVjb2RlPWZ1bmN0aW9uKHUpe3ZhciBsLEEsZCxnLGYsQyxwPTAsYj0wLG09ImRhdGE6IjtpZih1LnN1YnN0cigwLG0ubGVuZ3RoKT09PW0pdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGJhc2U2NCBpbnB1dCwgaXQgbG9va3MgbGlrZSBhIGRhdGEgdXJsLiIpO3ZhciBFLHc9MyoodT11LnJlcGxhY2UoL1teQS1aYS16MC05Ky89XS9nLCIiKSkubGVuZ3RoLzQ7aWYodS5jaGFyQXQodS5sZW5ndGgtMSk9PT1vLmNoYXJBdCg2NCkmJnctLSx1LmNoYXJBdCh1Lmxlbmd0aC0yKT09PW8uY2hhckF0KDY0KSYmdy0tLHclMSE9MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYmFzZTY0IGlucHV0LCBiYWQgY29udGVudCBsZW5ndGguIik7Zm9yKEU9YS51aW50OGFycmF5P25ldyBVaW50OEFycmF5KDB8dyk6bmV3IEFycmF5KDB8dyk7cDx1Lmxlbmd0aDspbD1vLmluZGV4T2YodS5jaGFyQXQocCsrKSk8PDJ8KGc9by5pbmRleE9mKHUuY2hhckF0KHArKykpKT4+NCxBPSgxNSZnKTw8NHwoZj1vLmluZGV4T2YodS5jaGFyQXQocCsrKSkpPj4yLGQ9KDMmZik8PDZ8KEM9by5pbmRleE9mKHUuY2hhckF0KHArKykpKSxFW2IrK109bCxmIT09NjQmJihFW2IrK109QSksQyE9PTY0JiYoRVtiKytdPWQpO3JldHVybiBFfX0seyIuL3N1cHBvcnQiOjMwLCIuL3V0aWxzIjozMn1dLDI6W2Z1bmN0aW9uKHQsbixzKXt2YXIgaT10KCIuL2V4dGVybmFsIiksYT10KCIuL3N0cmVhbS9EYXRhV29ya2VyIiksbz10KCIuL3N0cmVhbS9DcmMzMlByb2JlIiksdT10KCIuL3N0cmVhbS9EYXRhTGVuZ3RoUHJvYmUiKTtmdW5jdGlvbiBsKEEsZCxnLGYsQyl7dGhpcy5jb21wcmVzc2VkU2l6ZT1BLHRoaXMudW5jb21wcmVzc2VkU2l6ZT1kLHRoaXMuY3JjMzI9Zyx0aGlzLmNvbXByZXNzaW9uPWYsdGhpcy5jb21wcmVzc2VkQ29udGVudD1DfWwucHJvdG90eXBlPXtnZXRDb250ZW50V29ya2VyOmZ1bmN0aW9uKCl7dmFyIEE9bmV3IGEoaS5Qcm9taXNlLnJlc29sdmUodGhpcy5jb21wcmVzc2VkQ29udGVudCkpLnBpcGUodGhpcy5jb21wcmVzc2lvbi51bmNvbXByZXNzV29ya2VyKCkpLnBpcGUobmV3IHUoImRhdGFfbGVuZ3RoIikpLGQ9dGhpcztyZXR1cm4gQS5vbigiZW5kIixmdW5jdGlvbigpe2lmKHRoaXMuc3RyZWFtSW5mby5kYXRhX2xlbmd0aCE9PWQudW5jb21wcmVzc2VkU2l6ZSl0aHJvdyBuZXcgRXJyb3IoIkJ1ZyA6IHVuY29tcHJlc3NlZCBkYXRhIHNpemUgbWlzbWF0Y2giKX0pLEF9LGdldENvbXByZXNzZWRXb3JrZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGEoaS5Qcm9taXNlLnJlc29sdmUodGhpcy5jb21wcmVzc2VkQ29udGVudCkpLndpdGhTdHJlYW1JbmZvKCJjb21wcmVzc2VkU2l6ZSIsdGhpcy5jb21wcmVzc2VkU2l6ZSkud2l0aFN0cmVhbUluZm8oInVuY29tcHJlc3NlZFNpemUiLHRoaXMudW5jb21wcmVzc2VkU2l6ZSkud2l0aFN0cmVhbUluZm8oImNyYzMyIix0aGlzLmNyYzMyKS53aXRoU3RyZWFtSW5mbygiY29tcHJlc3Npb24iLHRoaXMuY29tcHJlc3Npb24pfX0sbC5jcmVhdGVXb3JrZXJGcm9tPWZ1bmN0aW9uKEEsZCxnKXtyZXR1cm4gQS5waXBlKG5ldyBvKS5waXBlKG5ldyB1KCJ1bmNvbXByZXNzZWRTaXplIikpLnBpcGUoZC5jb21wcmVzc1dvcmtlcihnKSkucGlwZShuZXcgdSgiY29tcHJlc3NlZFNpemUiKSkud2l0aFN0cmVhbUluZm8oImNvbXByZXNzaW9uIixkKX0sbi5leHBvcnRzPWx9LHsiLi9leHRlcm5hbCI6NiwiLi9zdHJlYW0vQ3JjMzJQcm9iZSI6MjUsIi4vc3RyZWFtL0RhdGFMZW5ndGhQcm9iZSI6MjYsIi4vc3RyZWFtL0RhdGFXb3JrZXIiOjI3fV0sMzpbZnVuY3Rpb24odCxuLHMpe3ZhciBpPXQoIi4vc3RyZWFtL0dlbmVyaWNXb3JrZXIiKTtzLlNUT1JFPXttYWdpYzoiXDBcMCIsY29tcHJlc3NXb3JrZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGkoIlNUT1JFIGNvbXByZXNzaW9uIil9LHVuY29tcHJlc3NXb3JrZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGkoIlNUT1JFIGRlY29tcHJlc3Npb24iKX19LHMuREVGTEFURT10KCIuL2ZsYXRlIil9LHsiLi9mbGF0ZSI6NywiLi9zdHJlYW0vR2VuZXJpY1dvcmtlciI6Mjh9XSw0OltmdW5jdGlvbih0LG4scyl7dmFyIGk9dCgiLi91dGlscyIpLGE9ZnVuY3Rpb24oKXtmb3IodmFyIG8sdT1bXSxsPTA7bDwyNTY7bCsrKXtvPWw7Zm9yKHZhciBBPTA7QTw4O0ErKylvPTEmbz8zOTg4MjkyMzg0Xm8+Pj4xOm8+Pj4xO3VbbF09b31yZXR1cm4gdX0oKTtuLmV4cG9ydHM9ZnVuY3Rpb24obyx1KXtyZXR1cm4gbyE9PXZvaWQgMCYmby5sZW5ndGg/aS5nZXRUeXBlT2YobykhPT0ic3RyaW5nIj9mdW5jdGlvbihsLEEsZCxnKXt2YXIgZj1hLEM9ZytkO2xePS0xO2Zvcih2YXIgcD1nO3A8QztwKyspbD1sPj4+OF5mWzI1NSYobF5BW3BdKV07cmV0dXJuLTFebH0oMHx1LG8sby5sZW5ndGgsMCk6ZnVuY3Rpb24obCxBLGQsZyl7dmFyIGY9YSxDPWcrZDtsXj0tMTtmb3IodmFyIHA9ZztwPEM7cCsrKWw9bD4+PjheZlsyNTUmKGxeQS5jaGFyQ29kZUF0KHApKV07cmV0dXJuLTFebH0oMHx1LG8sby5sZW5ndGgsMCk6MH19LHsiLi91dGlscyI6MzJ9XSw1OltmdW5jdGlvbih0LG4scyl7cy5iYXNlNjQ9ITEscy5iaW5hcnk9ITEscy5kaXI9ITEscy5jcmVhdGVGb2xkZXJzPSEwLHMuZGF0ZT1udWxsLHMuY29tcHJlc3Npb249bnVsbCxzLmNvbXByZXNzaW9uT3B0aW9ucz1udWxsLHMuY29tbWVudD1udWxsLHMudW5peFBlcm1pc3Npb25zPW51bGwscy5kb3NQZXJtaXNzaW9ucz1udWxsfSx7fV0sNjpbZnVuY3Rpb24odCxuLHMpe3ZhciBpPW51bGw7aT10eXBlb2YgUHJvbWlzZTwidSI/UHJvbWlzZTp0KCJsaWUiKSxuLmV4cG9ydHM9e1Byb21pc2U6aX19LHtsaWU6Mzd9XSw3OltmdW5jdGlvbih0LG4scyl7dmFyIGk9dHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZ0eXBlb2YgVWludDE2QXJyYXk8InUiJiZ0eXBlb2YgVWludDMyQXJyYXk8InUiLGE9dCgicGFrbyIpLG89dCgiLi91dGlscyIpLHU9dCgiLi9zdHJlYW0vR2VuZXJpY1dvcmtlciIpLGw9aT8idWludDhhcnJheSI6ImFycmF5IjtmdW5jdGlvbiBBKGQsZyl7dS5jYWxsKHRoaXMsIkZsYXRlV29ya2VyLyIrZCksdGhpcy5fcGFrbz1udWxsLHRoaXMuX3Bha29BY3Rpb249ZCx0aGlzLl9wYWtvT3B0aW9ucz1nLHRoaXMubWV0YT17fX1zLm1hZ2ljPSJcYlwwIixvLmluaGVyaXRzKEEsdSksQS5wcm90b3R5cGUucHJvY2Vzc0NodW5rPWZ1bmN0aW9uKGQpe3RoaXMubWV0YT1kLm1ldGEsdGhpcy5fcGFrbz09PW51bGwmJnRoaXMuX2NyZWF0ZVBha28oKSx0aGlzLl9wYWtvLnB1c2goby50cmFuc2Zvcm1UbyhsLGQuZGF0YSksITEpfSxBLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe3UucHJvdG90eXBlLmZsdXNoLmNhbGwodGhpcyksdGhpcy5fcGFrbz09PW51bGwmJnRoaXMuX2NyZWF0ZVBha28oKSx0aGlzLl9wYWtvLnB1c2goW10sITApfSxBLnByb3RvdHlwZS5jbGVhblVwPWZ1bmN0aW9uKCl7dS5wcm90b3R5cGUuY2xlYW5VcC5jYWxsKHRoaXMpLHRoaXMuX3Bha289bnVsbH0sQS5wcm90b3R5cGUuX2NyZWF0ZVBha289ZnVuY3Rpb24oKXt0aGlzLl9wYWtvPW5ldyBhW3RoaXMuX3Bha29BY3Rpb25dKHtyYXc6ITAsbGV2ZWw6dGhpcy5fcGFrb09wdGlvbnMubGV2ZWx8fC0xfSk7dmFyIGQ9dGhpczt0aGlzLl9wYWtvLm9uRGF0YT1mdW5jdGlvbihnKXtkLnB1c2goe2RhdGE6ZyxtZXRhOmQubWV0YX0pfX0scy5jb21wcmVzc1dvcmtlcj1mdW5jdGlvbihkKXtyZXR1cm4gbmV3IEEoIkRlZmxhdGUiLGQpfSxzLnVuY29tcHJlc3NXb3JrZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEEoIkluZmxhdGUiLHt9KX19LHsiLi9zdHJlYW0vR2VuZXJpY1dvcmtlciI6MjgsIi4vdXRpbHMiOjMyLHBha286Mzh9XSw4OltmdW5jdGlvbih0LG4scyl7ZnVuY3Rpb24gaShmLEMpe3ZhciBwLGI9IiI7Zm9yKHA9MDtwPEM7cCsrKWIrPVN0cmluZy5mcm9tQ2hhckNvZGUoMjU1JmYpLGY+Pj49ODtyZXR1cm4gYn1mdW5jdGlvbiBhKGYsQyxwLGIsbSxFKXt2YXIgdyxOLEk9Zi5maWxlLFI9Zi5jb21wcmVzc2lvbixNPUUhPT1sLnV0ZjhlbmNvZGUsVz1vLnRyYW5zZm9ybVRvKCJzdHJpbmciLEUoSS5uYW1lKSksTz1vLnRyYW5zZm9ybVRvKCJzdHJpbmciLGwudXRmOGVuY29kZShJLm5hbWUpKSxWPUkuY29tbWVudCxYPW8udHJhbnNmb3JtVG8oInN0cmluZyIsRShWKSksdj1vLnRyYW5zZm9ybVRvKCJzdHJpbmciLGwudXRmOGVuY29kZShWKSksUD1PLmxlbmd0aCE9PUkubmFtZS5sZW5ndGgsaD12Lmxlbmd0aCE9PVYubGVuZ3RoLEc9IiIsaGU9IiIsSz0iIixBZT1JLmRpcixVPUkuZGF0ZSxzZT17Y3JjMzI6MCxjb21wcmVzc2VkU2l6ZTowLHVuY29tcHJlc3NlZFNpemU6MH07QyYmIXB8fChzZS5jcmMzMj1mLmNyYzMyLHNlLmNvbXByZXNzZWRTaXplPWYuY29tcHJlc3NlZFNpemUsc2UudW5jb21wcmVzc2VkU2l6ZT1mLnVuY29tcHJlc3NlZFNpemUpO3ZhciBGPTA7QyYmKEZ8PTgpLE18fCFQJiYhaHx8KEZ8PTIwNDgpO3ZhciBUPTAsdWU9MDtBZSYmKFR8PTE2KSxtPT09IlVOSVgiPyh1ZT03OTgsVHw9ZnVuY3Rpb24oaixMZSl7dmFyICRlPWo7cmV0dXJuIGp8fCgkZT1MZT8xNjg5MzozMzIwNCksKDY1NTM1JiRlKTw8MTZ9KEkudW5peFBlcm1pc3Npb25zLEFlKSk6KHVlPTIwLFR8PWZ1bmN0aW9uKGope3JldHVybiA2MyYoanx8MCl9KEkuZG9zUGVybWlzc2lvbnMpKSx3PVUuZ2V0VVRDSG91cnMoKSx3PDw9Nix3fD1VLmdldFVUQ01pbnV0ZXMoKSx3PDw9NSx3fD1VLmdldFVUQ1NlY29uZHMoKS8yLE49VS5nZXRVVENGdWxsWWVhcigpLTE5ODAsTjw8PTQsTnw9VS5nZXRVVENNb250aCgpKzEsTjw8PTUsTnw9VS5nZXRVVENEYXRlKCksUCYmKGhlPWkoMSwxKStpKEEoVyksNCkrTyxHKz0idXAiK2koaGUubGVuZ3RoLDIpK2hlKSxoJiYoSz1pKDEsMSkraShBKFgpLDQpK3YsRys9InVjIitpKEsubGVuZ3RoLDIpK0spO3ZhciB0ZT0iIjtyZXR1cm4gdGUrPWAKXDBgLHRlKz1pKEYsMiksdGUrPVIubWFnaWMsdGUrPWkodywyKSx0ZSs9aShOLDIpLHRlKz1pKHNlLmNyYzMyLDQpLHRlKz1pKHNlLmNvbXByZXNzZWRTaXplLDQpLHRlKz1pKHNlLnVuY29tcHJlc3NlZFNpemUsNCksdGUrPWkoVy5sZW5ndGgsMiksdGUrPWkoRy5sZW5ndGgsMikse2ZpbGVSZWNvcmQ6ZC5MT0NBTF9GSUxFX0hFQURFUit0ZStXK0csZGlyUmVjb3JkOmQuQ0VOVFJBTF9GSUxFX0hFQURFUitpKHVlLDIpK3RlK2koWC5sZW5ndGgsMikrIlwwXDBcMFwwIitpKFQsNCkraShiLDQpK1crRytYfX12YXIgbz10KCIuLi91dGlscyIpLHU9dCgiLi4vc3RyZWFtL0dlbmVyaWNXb3JrZXIiKSxsPXQoIi4uL3V0ZjgiKSxBPXQoIi4uL2NyYzMyIiksZD10KCIuLi9zaWduYXR1cmUiKTtmdW5jdGlvbiBnKGYsQyxwLGIpe3UuY2FsbCh0aGlzLCJaaXBGaWxlV29ya2VyIiksdGhpcy5ieXRlc1dyaXR0ZW49MCx0aGlzLnppcENvbW1lbnQ9Qyx0aGlzLnppcFBsYXRmb3JtPXAsdGhpcy5lbmNvZGVGaWxlTmFtZT1iLHRoaXMuc3RyZWFtRmlsZXM9Zix0aGlzLmFjY3VtdWxhdGU9ITEsdGhpcy5jb250ZW50QnVmZmVyPVtdLHRoaXMuZGlyUmVjb3Jkcz1bXSx0aGlzLmN1cnJlbnRTb3VyY2VPZmZzZXQ9MCx0aGlzLmVudHJpZXNDb3VudD0wLHRoaXMuY3VycmVudEZpbGU9bnVsbCx0aGlzLl9zb3VyY2VzPVtdfW8uaW5oZXJpdHMoZyx1KSxnLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGYpe3ZhciBDPWYubWV0YS5wZXJjZW50fHwwLHA9dGhpcy5lbnRyaWVzQ291bnQsYj10aGlzLl9zb3VyY2VzLmxlbmd0aDt0aGlzLmFjY3VtdWxhdGU/dGhpcy5jb250ZW50QnVmZmVyLnB1c2goZik6KHRoaXMuYnl0ZXNXcml0dGVuKz1mLmRhdGEubGVuZ3RoLHUucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLHtkYXRhOmYuZGF0YSxtZXRhOntjdXJyZW50RmlsZTp0aGlzLmN1cnJlbnRGaWxlLHBlcmNlbnQ6cD8oQysxMDAqKHAtYi0xKSkvcDoxMDB9fSkpfSxnLnByb3RvdHlwZS5vcGVuZWRTb3VyY2U9ZnVuY3Rpb24oZil7dGhpcy5jdXJyZW50U291cmNlT2Zmc2V0PXRoaXMuYnl0ZXNXcml0dGVuLHRoaXMuY3VycmVudEZpbGU9Zi5maWxlLm5hbWU7dmFyIEM9dGhpcy5zdHJlYW1GaWxlcyYmIWYuZmlsZS5kaXI7aWYoQyl7dmFyIHA9YShmLEMsITEsdGhpcy5jdXJyZW50U291cmNlT2Zmc2V0LHRoaXMuemlwUGxhdGZvcm0sdGhpcy5lbmNvZGVGaWxlTmFtZSk7dGhpcy5wdXNoKHtkYXRhOnAuZmlsZVJlY29yZCxtZXRhOntwZXJjZW50OjB9fSl9ZWxzZSB0aGlzLmFjY3VtdWxhdGU9ITB9LGcucHJvdG90eXBlLmNsb3NlZFNvdXJjZT1mdW5jdGlvbihmKXt0aGlzLmFjY3VtdWxhdGU9ITE7dmFyIEM9dGhpcy5zdHJlYW1GaWxlcyYmIWYuZmlsZS5kaXIscD1hKGYsQywhMCx0aGlzLmN1cnJlbnRTb3VyY2VPZmZzZXQsdGhpcy56aXBQbGF0Zm9ybSx0aGlzLmVuY29kZUZpbGVOYW1lKTtpZih0aGlzLmRpclJlY29yZHMucHVzaChwLmRpclJlY29yZCksQyl0aGlzLnB1c2goe2RhdGE6ZnVuY3Rpb24oYil7cmV0dXJuIGQuREFUQV9ERVNDUklQVE9SK2koYi5jcmMzMiw0KStpKGIuY29tcHJlc3NlZFNpemUsNCkraShiLnVuY29tcHJlc3NlZFNpemUsNCl9KGYpLG1ldGE6e3BlcmNlbnQ6MTAwfX0pO2Vsc2UgZm9yKHRoaXMucHVzaCh7ZGF0YTpwLmZpbGVSZWNvcmQsbWV0YTp7cGVyY2VudDowfX0pO3RoaXMuY29udGVudEJ1ZmZlci5sZW5ndGg7KXRoaXMucHVzaCh0aGlzLmNvbnRlbnRCdWZmZXIuc2hpZnQoKSk7dGhpcy5jdXJyZW50RmlsZT1udWxsfSxnLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe2Zvcih2YXIgZj10aGlzLmJ5dGVzV3JpdHRlbixDPTA7Qzx0aGlzLmRpclJlY29yZHMubGVuZ3RoO0MrKyl0aGlzLnB1c2goe2RhdGE6dGhpcy5kaXJSZWNvcmRzW0NdLG1ldGE6e3BlcmNlbnQ6MTAwfX0pO3ZhciBwPXRoaXMuYnl0ZXNXcml0dGVuLWYsYj1mdW5jdGlvbihtLEUsdyxOLEkpe3ZhciBSPW8udHJhbnNmb3JtVG8oInN0cmluZyIsSShOKSk7cmV0dXJuIGQuQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKyJcMFwwXDBcMCIraShtLDIpK2kobSwyKStpKEUsNCkraSh3LDQpK2koUi5sZW5ndGgsMikrUn0odGhpcy5kaXJSZWNvcmRzLmxlbmd0aCxwLGYsdGhpcy56aXBDb21tZW50LHRoaXMuZW5jb2RlRmlsZU5hbWUpO3RoaXMucHVzaCh7ZGF0YTpiLG1ldGE6e3BlcmNlbnQ6MTAwfX0pfSxnLnByb3RvdHlwZS5wcmVwYXJlTmV4dFNvdXJjZT1mdW5jdGlvbigpe3RoaXMucHJldmlvdXM9dGhpcy5fc291cmNlcy5zaGlmdCgpLHRoaXMub3BlbmVkU291cmNlKHRoaXMucHJldmlvdXMuc3RyZWFtSW5mbyksdGhpcy5pc1BhdXNlZD90aGlzLnByZXZpb3VzLnBhdXNlKCk6dGhpcy5wcmV2aW91cy5yZXN1bWUoKX0sZy5wcm90b3R5cGUucmVnaXN0ZXJQcmV2aW91cz1mdW5jdGlvbihmKXt0aGlzLl9zb3VyY2VzLnB1c2goZik7dmFyIEM9dGhpcztyZXR1cm4gZi5vbigiZGF0YSIsZnVuY3Rpb24ocCl7Qy5wcm9jZXNzQ2h1bmsocCl9KSxmLm9uKCJlbmQiLGZ1bmN0aW9uKCl7Qy5jbG9zZWRTb3VyY2UoQy5wcmV2aW91cy5zdHJlYW1JbmZvKSxDLl9zb3VyY2VzLmxlbmd0aD9DLnByZXBhcmVOZXh0U291cmNlKCk6Qy5lbmQoKX0pLGYub24oImVycm9yIixmdW5jdGlvbihwKXtDLmVycm9yKHApfSksdGhpc30sZy5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7cmV0dXJuISF1LnByb3RvdHlwZS5yZXN1bWUuY2FsbCh0aGlzKSYmKCF0aGlzLnByZXZpb3VzJiZ0aGlzLl9zb3VyY2VzLmxlbmd0aD8odGhpcy5wcmVwYXJlTmV4dFNvdXJjZSgpLCEwKTp0aGlzLnByZXZpb3VzfHx0aGlzLl9zb3VyY2VzLmxlbmd0aHx8dGhpcy5nZW5lcmF0ZWRFcnJvcj92b2lkIDA6KHRoaXMuZW5kKCksITApKX0sZy5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24oZil7dmFyIEM9dGhpcy5fc291cmNlcztpZighdS5wcm90b3R5cGUuZXJyb3IuY2FsbCh0aGlzLGYpKXJldHVybiExO2Zvcih2YXIgcD0wO3A8Qy5sZW5ndGg7cCsrKXRyeXtDW3BdLmVycm9yKGYpfWNhdGNoe31yZXR1cm4hMH0sZy5wcm90b3R5cGUubG9jaz1mdW5jdGlvbigpe3UucHJvdG90eXBlLmxvY2suY2FsbCh0aGlzKTtmb3IodmFyIGY9dGhpcy5fc291cmNlcyxDPTA7QzxmLmxlbmd0aDtDKyspZltDXS5sb2NrKCl9LG4uZXhwb3J0cz1nfSx7Ii4uL2NyYzMyIjo0LCIuLi9zaWduYXR1cmUiOjIzLCIuLi9zdHJlYW0vR2VuZXJpY1dvcmtlciI6MjgsIi4uL3V0ZjgiOjMxLCIuLi91dGlscyI6MzJ9XSw5OltmdW5jdGlvbih0LG4scyl7dmFyIGk9dCgiLi4vY29tcHJlc3Npb25zIiksYT10KCIuL1ppcEZpbGVXb3JrZXIiKTtzLmdlbmVyYXRlV29ya2VyPWZ1bmN0aW9uKG8sdSxsKXt2YXIgQT1uZXcgYSh1LnN0cmVhbUZpbGVzLGwsdS5wbGF0Zm9ybSx1LmVuY29kZUZpbGVOYW1lKSxkPTA7dHJ5e28uZm9yRWFjaChmdW5jdGlvbihnLGYpe2QrKzt2YXIgQz1mdW5jdGlvbihFLHcpe3ZhciBOPUV8fHcsST1pW05dO2lmKCFJKXRocm93IG5ldyBFcnJvcihOKyIgaXMgbm90IGEgdmFsaWQgY29tcHJlc3Npb24gbWV0aG9kICEiKTtyZXR1cm4gSX0oZi5vcHRpb25zLmNvbXByZXNzaW9uLHUuY29tcHJlc3Npb24pLHA9Zi5vcHRpb25zLmNvbXByZXNzaW9uT3B0aW9uc3x8dS5jb21wcmVzc2lvbk9wdGlvbnN8fHt9LGI9Zi5kaXIsbT1mLmRhdGU7Zi5fY29tcHJlc3NXb3JrZXIoQyxwKS53aXRoU3RyZWFtSW5mbygiZmlsZSIse25hbWU6ZyxkaXI6YixkYXRlOm0sY29tbWVudDpmLmNvbW1lbnR8fCIiLHVuaXhQZXJtaXNzaW9uczpmLnVuaXhQZXJtaXNzaW9ucyxkb3NQZXJtaXNzaW9uczpmLmRvc1Blcm1pc3Npb25zfSkucGlwZShBKX0pLEEuZW50cmllc0NvdW50PWR9Y2F0Y2goZyl7QS5lcnJvcihnKX1yZXR1cm4gQX19LHsiLi4vY29tcHJlc3Npb25zIjozLCIuL1ppcEZpbGVXb3JrZXIiOjh9XSwxMDpbZnVuY3Rpb24odCxuLHMpe2Z1bmN0aW9uIGkoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBpKSlyZXR1cm4gbmV3IGk7aWYoYXJndW1lbnRzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBjb25zdHJ1Y3RvciB3aXRoIHBhcmFtZXRlcnMgaGFzIGJlZW4gcmVtb3ZlZCBpbiBKU1ppcCAzLjAsIHBsZWFzZSBjaGVjayB0aGUgdXBncmFkZSBndWlkZS4iKTt0aGlzLmZpbGVzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5jb21tZW50PW51bGwsdGhpcy5yb290PSIiLHRoaXMuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgaTtmb3IodmFyIG8gaW4gdGhpcyl0eXBlb2YgdGhpc1tvXSE9ImZ1bmN0aW9uIiYmKGFbb109dGhpc1tvXSk7cmV0dXJuIGF9fShpLnByb3RvdHlwZT10KCIuL29iamVjdCIpKS5sb2FkQXN5bmM9dCgiLi9sb2FkIiksaS5zdXBwb3J0PXQoIi4vc3VwcG9ydCIpLGkuZGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLGkudmVyc2lvbj0iMy4xMC4xIixpLmxvYWRBc3luYz1mdW5jdGlvbihhLG8pe3JldHVybiBuZXcgaSgpLmxvYWRBc3luYyhhLG8pfSxpLmV4dGVybmFsPXQoIi4vZXh0ZXJuYWwiKSxuLmV4cG9ydHM9aX0seyIuL2RlZmF1bHRzIjo1LCIuL2V4dGVybmFsIjo2LCIuL2xvYWQiOjExLCIuL29iamVjdCI6MTUsIi4vc3VwcG9ydCI6MzB9XSwxMTpbZnVuY3Rpb24odCxuLHMpe3ZhciBpPXQoIi4vdXRpbHMiKSxhPXQoIi4vZXh0ZXJuYWwiKSxvPXQoIi4vdXRmOCIpLHU9dCgiLi96aXBFbnRyaWVzIiksbD10KCIuL3N0cmVhbS9DcmMzMlByb2JlIiksQT10KCIuL25vZGVqc1V0aWxzIik7ZnVuY3Rpb24gZChnKXtyZXR1cm4gbmV3IGEuUHJvbWlzZShmdW5jdGlvbihmLEMpe3ZhciBwPWcuZGVjb21wcmVzc2VkLmdldENvbnRlbnRXb3JrZXIoKS5waXBlKG5ldyBsKTtwLm9uKCJlcnJvciIsZnVuY3Rpb24oYil7QyhiKX0pLm9uKCJlbmQiLGZ1bmN0aW9uKCl7cC5zdHJlYW1JbmZvLmNyYzMyIT09Zy5kZWNvbXByZXNzZWQuY3JjMzI/QyhuZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXAgOiBDUkMzMiBtaXNtYXRjaCIpKTpmKCl9KS5yZXN1bWUoKX0pfW4uZXhwb3J0cz1mdW5jdGlvbihnLGYpe3ZhciBDPXRoaXM7cmV0dXJuIGY9aS5leHRlbmQoZnx8e30se2Jhc2U2NDohMSxjaGVja0NSQzMyOiExLG9wdGltaXplZEJpbmFyeVN0cmluZzohMSxjcmVhdGVGb2xkZXJzOiExLGRlY29kZUZpbGVOYW1lOm8udXRmOGRlY29kZX0pLEEuaXNOb2RlJiZBLmlzU3RyZWFtKGcpP2EuUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJKU1ppcCBjYW4ndCBhY2NlcHQgYSBzdHJlYW0gd2hlbiBsb2FkaW5nIGEgemlwIGZpbGUuIikpOmkucHJlcGFyZUNvbnRlbnQoInRoZSBsb2FkZWQgemlwIGZpbGUiLGcsITAsZi5vcHRpbWl6ZWRCaW5hcnlTdHJpbmcsZi5iYXNlNjQpLnRoZW4oZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHUoZik7cmV0dXJuIGIubG9hZChwKSxifSkudGhlbihmdW5jdGlvbihwKXt2YXIgYj1bYS5Qcm9taXNlLnJlc29sdmUocCldLG09cC5maWxlcztpZihmLmNoZWNrQ1JDMzIpZm9yKHZhciBFPTA7RTxtLmxlbmd0aDtFKyspYi5wdXNoKGQobVtFXSkpO3JldHVybiBhLlByb21pc2UuYWxsKGIpfSkudGhlbihmdW5jdGlvbihwKXtmb3IodmFyIGI9cC5zaGlmdCgpLG09Yi5maWxlcyxFPTA7RTxtLmxlbmd0aDtFKyspe3ZhciB3PW1bRV0sTj13LmZpbGVOYW1lU3RyLEk9aS5yZXNvbHZlKHcuZmlsZU5hbWVTdHIpO0MuZmlsZShJLHcuZGVjb21wcmVzc2VkLHtiaW5hcnk6ITAsb3B0aW1pemVkQmluYXJ5U3RyaW5nOiEwLGRhdGU6dy5kYXRlLGRpcjp3LmRpcixjb21tZW50OncuZmlsZUNvbW1lbnRTdHIubGVuZ3RoP3cuZmlsZUNvbW1lbnRTdHI6bnVsbCx1bml4UGVybWlzc2lvbnM6dy51bml4UGVybWlzc2lvbnMsZG9zUGVybWlzc2lvbnM6dy5kb3NQZXJtaXNzaW9ucyxjcmVhdGVGb2xkZXJzOmYuY3JlYXRlRm9sZGVyc30pLHcuZGlyfHwoQy5maWxlKEkpLnVuc2FmZU9yaWdpbmFsTmFtZT1OKX1yZXR1cm4gYi56aXBDb21tZW50Lmxlbmd0aCYmKEMuY29tbWVudD1iLnppcENvbW1lbnQpLEN9KX19LHsiLi9leHRlcm5hbCI6NiwiLi9ub2RlanNVdGlscyI6MTQsIi4vc3RyZWFtL0NyYzMyUHJvYmUiOjI1LCIuL3V0ZjgiOjMxLCIuL3V0aWxzIjozMiwiLi96aXBFbnRyaWVzIjozM31dLDEyOltmdW5jdGlvbih0LG4scyl7dmFyIGk9dCgiLi4vdXRpbHMiKSxhPXQoIi4uL3N0cmVhbS9HZW5lcmljV29ya2VyIik7ZnVuY3Rpb24gbyh1LGwpe2EuY2FsbCh0aGlzLCJOb2RlanMgc3RyZWFtIGlucHV0IGFkYXB0ZXIgZm9yICIrdSksdGhpcy5fdXBzdHJlYW1FbmRlZD0hMSx0aGlzLl9iaW5kU3RyZWFtKGwpfWkuaW5oZXJpdHMobyxhKSxvLnByb3RvdHlwZS5fYmluZFN0cmVhbT1mdW5jdGlvbih1KXt2YXIgbD10aGlzOyh0aGlzLl9zdHJlYW09dSkucGF1c2UoKSx1Lm9uKCJkYXRhIixmdW5jdGlvbihBKXtsLnB1c2goe2RhdGE6QSxtZXRhOntwZXJjZW50OjB9fSl9KS5vbigiZXJyb3IiLGZ1bmN0aW9uKEEpe2wuaXNQYXVzZWQ/dGhpcy5nZW5lcmF0ZWRFcnJvcj1BOmwuZXJyb3IoQSl9KS5vbigiZW5kIixmdW5jdGlvbigpe2wuaXNQYXVzZWQ/bC5fdXBzdHJlYW1FbmRlZD0hMDpsLmVuZCgpfSl9LG8ucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7cmV0dXJuISFhLnByb3RvdHlwZS5wYXVzZS5jYWxsKHRoaXMpJiYodGhpcy5fc3RyZWFtLnBhdXNlKCksITApfSxvLnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXtyZXR1cm4hIWEucHJvdG90eXBlLnJlc3VtZS5jYWxsKHRoaXMpJiYodGhpcy5fdXBzdHJlYW1FbmRlZD90aGlzLmVuZCgpOnRoaXMuX3N0cmVhbS5yZXN1bWUoKSwhMCl9LG4uZXhwb3J0cz1vfSx7Ii4uL3N0cmVhbS9HZW5lcmljV29ya2VyIjoyOCwiLi4vdXRpbHMiOjMyfV0sMTM6W2Z1bmN0aW9uKHQsbixzKXt2YXIgaT10KCJyZWFkYWJsZS1zdHJlYW0iKS5SZWFkYWJsZTtmdW5jdGlvbiBhKG8sdSxsKXtpLmNhbGwodGhpcyx1KSx0aGlzLl9oZWxwZXI9bzt2YXIgQT10aGlzO28ub24oImRhdGEiLGZ1bmN0aW9uKGQsZyl7QS5wdXNoKGQpfHxBLl9oZWxwZXIucGF1c2UoKSxsJiZsKGcpfSkub24oImVycm9yIixmdW5jdGlvbihkKXtBLmVtaXQoImVycm9yIixkKX0pLm9uKCJlbmQiLGZ1bmN0aW9uKCl7QS5wdXNoKG51bGwpfSl9dCgiLi4vdXRpbHMiKS5pbmhlcml0cyhhLGkpLGEucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKCl7dGhpcy5faGVscGVyLnJlc3VtZSgpfSxuLmV4cG9ydHM9YX0seyIuLi91dGlscyI6MzIsInJlYWRhYmxlLXN0cmVhbSI6MTZ9XSwxNDpbZnVuY3Rpb24odCxuLHMpe24uZXhwb3J0cz17aXNOb2RlOnR5cGVvZiBCdWZmZXI8InUiLG5ld0J1ZmZlckZyb206ZnVuY3Rpb24oaSxhKXtpZihCdWZmZXIuZnJvbSYmQnVmZmVyLmZyb20hPT1VaW50OEFycmF5LmZyb20pcmV0dXJuIEJ1ZmZlci5mcm9tKGksYSk7aWYodHlwZW9mIGk9PSJudW1iZXIiKXRocm93IG5ldyBFcnJvcignVGhlICJkYXRhIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpO3JldHVybiBuZXcgQnVmZmVyKGksYSl9LGFsbG9jQnVmZmVyOmZ1bmN0aW9uKGkpe2lmKEJ1ZmZlci5hbGxvYylyZXR1cm4gQnVmZmVyLmFsbG9jKGkpO3ZhciBhPW5ldyBCdWZmZXIoaSk7cmV0dXJuIGEuZmlsbCgwKSxhfSxpc0J1ZmZlcjpmdW5jdGlvbihpKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKGkpfSxpc1N0cmVhbTpmdW5jdGlvbihpKXtyZXR1cm4gaSYmdHlwZW9mIGkub249PSJmdW5jdGlvbiImJnR5cGVvZiBpLnBhdXNlPT0iZnVuY3Rpb24iJiZ0eXBlb2YgaS5yZXN1bWU9PSJmdW5jdGlvbiJ9fX0se31dLDE1OltmdW5jdGlvbih0LG4scyl7ZnVuY3Rpb24gaShJLFIsTSl7dmFyIFcsTz1vLmdldFR5cGVPZihSKSxWPW8uZXh0ZW5kKE18fHt9LEEpO1YuZGF0ZT1WLmRhdGV8fG5ldyBEYXRlLFYuY29tcHJlc3Npb24hPT1udWxsJiYoVi5jb21wcmVzc2lvbj1WLmNvbXByZXNzaW9uLnRvVXBwZXJDYXNlKCkpLHR5cGVvZiBWLnVuaXhQZXJtaXNzaW9ucz09InN0cmluZyImJihWLnVuaXhQZXJtaXNzaW9ucz1wYXJzZUludChWLnVuaXhQZXJtaXNzaW9ucyw4KSksVi51bml4UGVybWlzc2lvbnMmJjE2Mzg0JlYudW5peFBlcm1pc3Npb25zJiYoVi5kaXI9ITApLFYuZG9zUGVybWlzc2lvbnMmJjE2JlYuZG9zUGVybWlzc2lvbnMmJihWLmRpcj0hMCksVi5kaXImJihJPW0oSSkpLFYuY3JlYXRlRm9sZGVycyYmKFc9YihJKSkmJkUuY2FsbCh0aGlzLFcsITApO3ZhciBYPU89PT0ic3RyaW5nIiYmVi5iaW5hcnk9PT0hMSYmVi5iYXNlNjQ9PT0hMTtNJiZNLmJpbmFyeSE9PXZvaWQgMHx8KFYuYmluYXJ5PSFYKSwoUiBpbnN0YW5jZW9mIGQmJlIudW5jb21wcmVzc2VkU2l6ZT09PTB8fFYuZGlyfHwhUnx8Ui5sZW5ndGg9PT0wKSYmKFYuYmFzZTY0PSExLFYuYmluYXJ5PSEwLFI9IiIsVi5jb21wcmVzc2lvbj0iU1RPUkUiLE89InN0cmluZyIpO3ZhciB2PW51bGw7dj1SIGluc3RhbmNlb2YgZHx8UiBpbnN0YW5jZW9mIHU/UjpDLmlzTm9kZSYmQy5pc1N0cmVhbShSKT9uZXcgcChJLFIpOm8ucHJlcGFyZUNvbnRlbnQoSSxSLFYuYmluYXJ5LFYub3B0aW1pemVkQmluYXJ5U3RyaW5nLFYuYmFzZTY0KTt2YXIgUD1uZXcgZyhJLHYsVik7dGhpcy5maWxlc1tJXT1QfXZhciBhPXQoIi4vdXRmOCIpLG89dCgiLi91dGlscyIpLHU9dCgiLi9zdHJlYW0vR2VuZXJpY1dvcmtlciIpLGw9dCgiLi9zdHJlYW0vU3RyZWFtSGVscGVyIiksQT10KCIuL2RlZmF1bHRzIiksZD10KCIuL2NvbXByZXNzZWRPYmplY3QiKSxnPXQoIi4vemlwT2JqZWN0IiksZj10KCIuL2dlbmVyYXRlIiksQz10KCIuL25vZGVqc1V0aWxzIikscD10KCIuL25vZGVqcy9Ob2RlanNTdHJlYW1JbnB1dEFkYXB0ZXIiKSxiPWZ1bmN0aW9uKEkpe0kuc2xpY2UoLTEpPT09Ii8iJiYoST1JLnN1YnN0cmluZygwLEkubGVuZ3RoLTEpKTt2YXIgUj1JLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuIDA8Uj9JLnN1YnN0cmluZygwLFIpOiIifSxtPWZ1bmN0aW9uKEkpe3JldHVybiBJLnNsaWNlKC0xKSE9PSIvIiYmKEkrPSIvIiksSX0sRT1mdW5jdGlvbihJLFIpe3JldHVybiBSPVIhPT12b2lkIDA/UjpBLmNyZWF0ZUZvbGRlcnMsST1tKEkpLHRoaXMuZmlsZXNbSV18fGkuY2FsbCh0aGlzLEksbnVsbCx7ZGlyOiEwLGNyZWF0ZUZvbGRlcnM6Un0pLHRoaXMuZmlsZXNbSV19O2Z1bmN0aW9uIHcoSSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChJKT09PSJbb2JqZWN0IFJlZ0V4cF0ifXZhciBOPXtsb2FkOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJUaGlzIG1ldGhvZCBoYXMgYmVlbiByZW1vdmVkIGluIEpTWmlwIDMuMCwgcGxlYXNlIGNoZWNrIHRoZSB1cGdyYWRlIGd1aWRlLiIpfSxmb3JFYWNoOmZ1bmN0aW9uKEkpe3ZhciBSLE0sVztmb3IoUiBpbiB0aGlzLmZpbGVzKVc9dGhpcy5maWxlc1tSXSwoTT1SLnNsaWNlKHRoaXMucm9vdC5sZW5ndGgsUi5sZW5ndGgpKSYmUi5zbGljZSgwLHRoaXMucm9vdC5sZW5ndGgpPT09dGhpcy5yb290JiZJKE0sVyl9LGZpbHRlcjpmdW5jdGlvbihJKXt2YXIgUj1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKE0sVyl7SShNLFcpJiZSLnB1c2goVyl9KSxSfSxmaWxlOmZ1bmN0aW9uKEksUixNKXtpZihhcmd1bWVudHMubGVuZ3RoIT09MSlyZXR1cm4gST10aGlzLnJvb3QrSSxpLmNhbGwodGhpcyxJLFIsTSksdGhpcztpZih3KEkpKXt2YXIgVz1JO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbihWLFgpe3JldHVybiFYLmRpciYmVy50ZXN0KFYpfSl9dmFyIE89dGhpcy5maWxlc1t0aGlzLnJvb3QrSV07cmV0dXJuIE8mJiFPLmRpcj9POm51bGx9LGZvbGRlcjpmdW5jdGlvbihJKXtpZighSSlyZXR1cm4gdGhpcztpZih3KEkpKXJldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbihPLFYpe3JldHVybiBWLmRpciYmSS50ZXN0KE8pfSk7dmFyIFI9dGhpcy5yb290K0ksTT1FLmNhbGwodGhpcyxSKSxXPXRoaXMuY2xvbmUoKTtyZXR1cm4gVy5yb290PU0ubmFtZSxXfSxyZW1vdmU6ZnVuY3Rpb24oSSl7ST10aGlzLnJvb3QrSTt2YXIgUj10aGlzLmZpbGVzW0ldO2lmKFJ8fChJLnNsaWNlKC0xKSE9PSIvIiYmKEkrPSIvIiksUj10aGlzLmZpbGVzW0ldKSxSJiYhUi5kaXIpZGVsZXRlIHRoaXMuZmlsZXNbSV07ZWxzZSBmb3IodmFyIE09dGhpcy5maWx0ZXIoZnVuY3Rpb24oTyxWKXtyZXR1cm4gVi5uYW1lLnNsaWNlKDAsSS5sZW5ndGgpPT09SX0pLFc9MDtXPE0ubGVuZ3RoO1crKylkZWxldGUgdGhpcy5maWxlc1tNW1ddLm5hbWVdO3JldHVybiB0aGlzfSxnZW5lcmF0ZTpmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiVGhpcyBtZXRob2QgaGFzIGJlZW4gcmVtb3ZlZCBpbiBKU1ppcCAzLjAsIHBsZWFzZSBjaGVjayB0aGUgdXBncmFkZSBndWlkZS4iKX0sZ2VuZXJhdGVJbnRlcm5hbFN0cmVhbTpmdW5jdGlvbihJKXt2YXIgUixNPXt9O3RyeXtpZigoTT1vLmV4dGVuZChJfHx7fSx7c3RyZWFtRmlsZXM6ITEsY29tcHJlc3Npb246IlNUT1JFIixjb21wcmVzc2lvbk9wdGlvbnM6bnVsbCx0eXBlOiIiLHBsYXRmb3JtOiJET1MiLGNvbW1lbnQ6bnVsbCxtaW1lVHlwZToiYXBwbGljYXRpb24vemlwIixlbmNvZGVGaWxlTmFtZTphLnV0ZjhlbmNvZGV9KSkudHlwZT1NLnR5cGUudG9Mb3dlckNhc2UoKSxNLmNvbXByZXNzaW9uPU0uY29tcHJlc3Npb24udG9VcHBlckNhc2UoKSxNLnR5cGU9PT0iYmluYXJ5c3RyaW5nIiYmKE0udHlwZT0ic3RyaW5nIiksIU0udHlwZSl0aHJvdyBuZXcgRXJyb3IoIk5vIG91dHB1dCB0eXBlIHNwZWNpZmllZC4iKTtvLmNoZWNrU3VwcG9ydChNLnR5cGUpLE0ucGxhdGZvcm0hPT0iZGFyd2luIiYmTS5wbGF0Zm9ybSE9PSJmcmVlYnNkIiYmTS5wbGF0Zm9ybSE9PSJsaW51eCImJk0ucGxhdGZvcm0hPT0ic3Vub3MifHwoTS5wbGF0Zm9ybT0iVU5JWCIpLE0ucGxhdGZvcm09PT0id2luMzIiJiYoTS5wbGF0Zm9ybT0iRE9TIik7dmFyIFc9TS5jb21tZW50fHx0aGlzLmNvbW1lbnR8fCIiO1I9Zi5nZW5lcmF0ZVdvcmtlcih0aGlzLE0sVyl9Y2F0Y2goTyl7KFI9bmV3IHUoImVycm9yIikpLmVycm9yKE8pfXJldHVybiBuZXcgbChSLE0udHlwZXx8InN0cmluZyIsTS5taW1lVHlwZSl9LGdlbmVyYXRlQXN5bmM6ZnVuY3Rpb24oSSxSKXtyZXR1cm4gdGhpcy5nZW5lcmF0ZUludGVybmFsU3RyZWFtKEkpLmFjY3VtdWxhdGUoUil9LGdlbmVyYXRlTm9kZVN0cmVhbTpmdW5jdGlvbihJLFIpe3JldHVybihJPUl8fHt9KS50eXBlfHwoSS50eXBlPSJub2RlYnVmZmVyIiksdGhpcy5nZW5lcmF0ZUludGVybmFsU3RyZWFtKEkpLnRvTm9kZWpzU3RyZWFtKFIpfX07bi5leHBvcnRzPU59LHsiLi9jb21wcmVzc2VkT2JqZWN0IjoyLCIuL2RlZmF1bHRzIjo1LCIuL2dlbmVyYXRlIjo5LCIuL25vZGVqcy9Ob2RlanNTdHJlYW1JbnB1dEFkYXB0ZXIiOjEyLCIuL25vZGVqc1V0aWxzIjoxNCwiLi9zdHJlYW0vR2VuZXJpY1dvcmtlciI6MjgsIi4vc3RyZWFtL1N0cmVhbUhlbHBlciI6MjksIi4vdXRmOCI6MzEsIi4vdXRpbHMiOjMyLCIuL3ppcE9iamVjdCI6MzV9XSwxNjpbZnVuY3Rpb24odCxuLHMpe24uZXhwb3J0cz10KCJzdHJlYW0iKX0se3N0cmVhbTp2b2lkIDB9XSwxNzpbZnVuY3Rpb24odCxuLHMpe3ZhciBpPXQoIi4vRGF0YVJlYWRlciIpO2Z1bmN0aW9uIGEobyl7aS5jYWxsKHRoaXMsbyk7Zm9yKHZhciB1PTA7dTx0aGlzLmRhdGEubGVuZ3RoO3UrKylvW3VdPTI1NSZvW3VdfXQoIi4uL3V0aWxzIikuaW5oZXJpdHMoYSxpKSxhLnByb3RvdHlwZS5ieXRlQXQ9ZnVuY3Rpb24obyl7cmV0dXJuIHRoaXMuZGF0YVt0aGlzLnplcm8rb119LGEucHJvdG90eXBlLmxhc3RJbmRleE9mU2lnbmF0dXJlPWZ1bmN0aW9uKG8pe2Zvcih2YXIgdT1vLmNoYXJDb2RlQXQoMCksbD1vLmNoYXJDb2RlQXQoMSksQT1vLmNoYXJDb2RlQXQoMiksZD1vLmNoYXJDb2RlQXQoMyksZz10aGlzLmxlbmd0aC00OzA8PWc7LS1nKWlmKHRoaXMuZGF0YVtnXT09PXUmJnRoaXMuZGF0YVtnKzFdPT09bCYmdGhpcy5kYXRhW2crMl09PT1BJiZ0aGlzLmRhdGFbZyszXT09PWQpcmV0dXJuIGctdGhpcy56ZXJvO3JldHVybi0xfSxhLnByb3RvdHlwZS5yZWFkQW5kQ2hlY2tTaWduYXR1cmU9ZnVuY3Rpb24obyl7dmFyIHU9by5jaGFyQ29kZUF0KDApLGw9by5jaGFyQ29kZUF0KDEpLEE9by5jaGFyQ29kZUF0KDIpLGQ9by5jaGFyQ29kZUF0KDMpLGc9dGhpcy5yZWFkRGF0YSg0KTtyZXR1cm4gdT09PWdbMF0mJmw9PT1nWzFdJiZBPT09Z1syXSYmZD09PWdbM119LGEucHJvdG90eXBlLnJlYWREYXRhPWZ1bmN0aW9uKG8pe2lmKHRoaXMuY2hlY2tPZmZzZXQobyksbz09PTApcmV0dXJuW107dmFyIHU9dGhpcy5kYXRhLnNsaWNlKHRoaXMuemVybyt0aGlzLmluZGV4LHRoaXMuemVybyt0aGlzLmluZGV4K28pO3JldHVybiB0aGlzLmluZGV4Kz1vLHV9LG4uZXhwb3J0cz1hfSx7Ii4uL3V0aWxzIjozMiwiLi9EYXRhUmVhZGVyIjoxOH1dLDE4OltmdW5jdGlvbih0LG4scyl7dmFyIGk9dCgiLi4vdXRpbHMiKTtmdW5jdGlvbiBhKG8pe3RoaXMuZGF0YT1vLHRoaXMubGVuZ3RoPW8ubGVuZ3RoLHRoaXMuaW5kZXg9MCx0aGlzLnplcm89MH1hLnByb3RvdHlwZT17Y2hlY2tPZmZzZXQ6ZnVuY3Rpb24obyl7dGhpcy5jaGVja0luZGV4KHRoaXMuaW5kZXgrbyl9LGNoZWNrSW5kZXg6ZnVuY3Rpb24obyl7aWYodGhpcy5sZW5ndGg8dGhpcy56ZXJvK298fG88MCl0aHJvdyBuZXcgRXJyb3IoIkVuZCBvZiBkYXRhIHJlYWNoZWQgKGRhdGEgbGVuZ3RoID0gIit0aGlzLmxlbmd0aCsiLCBhc2tlZCBpbmRleCA9ICIrbysiKS4gQ29ycnVwdGVkIHppcCA/Iil9LHNldEluZGV4OmZ1bmN0aW9uKG8pe3RoaXMuY2hlY2tJbmRleChvKSx0aGlzLmluZGV4PW99LHNraXA6ZnVuY3Rpb24obyl7dGhpcy5zZXRJbmRleCh0aGlzLmluZGV4K28pfSxieXRlQXQ6ZnVuY3Rpb24oKXt9LHJlYWRJbnQ6ZnVuY3Rpb24obyl7dmFyIHUsbD0wO2Zvcih0aGlzLmNoZWNrT2Zmc2V0KG8pLHU9dGhpcy5pbmRleCtvLTE7dT49dGhpcy5pbmRleDt1LS0pbD0obDw8OCkrdGhpcy5ieXRlQXQodSk7cmV0dXJuIHRoaXMuaW5kZXgrPW8sbH0scmVhZFN0cmluZzpmdW5jdGlvbihvKXtyZXR1cm4gaS50cmFuc2Zvcm1Ubygic3RyaW5nIix0aGlzLnJlYWREYXRhKG8pKX0scmVhZERhdGE6ZnVuY3Rpb24oKXt9LGxhc3RJbmRleE9mU2lnbmF0dXJlOmZ1bmN0aW9uKCl7fSxyZWFkQW5kQ2hlY2tTaWduYXR1cmU6ZnVuY3Rpb24oKXt9LHJlYWREYXRlOmZ1bmN0aW9uKCl7dmFyIG89dGhpcy5yZWFkSW50KDQpO3JldHVybiBuZXcgRGF0ZShEYXRlLlVUQygxOTgwKyhvPj4yNSYxMjcpLChvPj4yMSYxNSktMSxvPj4xNiYzMSxvPj4xMSYzMSxvPj41JjYzLCgzMSZvKTw8MSkpfX0sbi5leHBvcnRzPWF9LHsiLi4vdXRpbHMiOjMyfV0sMTk6W2Z1bmN0aW9uKHQsbixzKXt2YXIgaT10KCIuL1VpbnQ4QXJyYXlSZWFkZXIiKTtmdW5jdGlvbiBhKG8pe2kuY2FsbCh0aGlzLG8pfXQoIi4uL3V0aWxzIikuaW5oZXJpdHMoYSxpKSxhLnByb3RvdHlwZS5yZWFkRGF0YT1mdW5jdGlvbihvKXt0aGlzLmNoZWNrT2Zmc2V0KG8pO3ZhciB1PXRoaXMuZGF0YS5zbGljZSh0aGlzLnplcm8rdGhpcy5pbmRleCx0aGlzLnplcm8rdGhpcy5pbmRleCtvKTtyZXR1cm4gdGhpcy5pbmRleCs9byx1fSxuLmV4cG9ydHM9YX0seyIuLi91dGlscyI6MzIsIi4vVWludDhBcnJheVJlYWRlciI6MjF9XSwyMDpbZnVuY3Rpb24odCxuLHMpe3ZhciBpPXQoIi4vRGF0YVJlYWRlciIpO2Z1bmN0aW9uIGEobyl7aS5jYWxsKHRoaXMsbyl9dCgiLi4vdXRpbHMiKS5pbmhlcml0cyhhLGkpLGEucHJvdG90eXBlLmJ5dGVBdD1mdW5jdGlvbihvKXtyZXR1cm4gdGhpcy5kYXRhLmNoYXJDb2RlQXQodGhpcy56ZXJvK28pfSxhLnByb3RvdHlwZS5sYXN0SW5kZXhPZlNpZ25hdHVyZT1mdW5jdGlvbihvKXtyZXR1cm4gdGhpcy5kYXRhLmxhc3RJbmRleE9mKG8pLXRoaXMuemVyb30sYS5wcm90b3R5cGUucmVhZEFuZENoZWNrU2lnbmF0dXJlPWZ1bmN0aW9uKG8pe3JldHVybiBvPT09dGhpcy5yZWFkRGF0YSg0KX0sYS5wcm90b3R5cGUucmVhZERhdGE9ZnVuY3Rpb24obyl7dGhpcy5jaGVja09mZnNldChvKTt2YXIgdT10aGlzLmRhdGEuc2xpY2UodGhpcy56ZXJvK3RoaXMuaW5kZXgsdGhpcy56ZXJvK3RoaXMuaW5kZXgrbyk7cmV0dXJuIHRoaXMuaW5kZXgrPW8sdX0sbi5leHBvcnRzPWF9LHsiLi4vdXRpbHMiOjMyLCIuL0RhdGFSZWFkZXIiOjE4fV0sMjE6W2Z1bmN0aW9uKHQsbixzKXt2YXIgaT10KCIuL0FycmF5UmVhZGVyIik7ZnVuY3Rpb24gYShvKXtpLmNhbGwodGhpcyxvKX10KCIuLi91dGlscyIpLmluaGVyaXRzKGEsaSksYS5wcm90b3R5cGUucmVhZERhdGE9ZnVuY3Rpb24obyl7aWYodGhpcy5jaGVja09mZnNldChvKSxvPT09MClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7dmFyIHU9dGhpcy5kYXRhLnN1YmFycmF5KHRoaXMuemVybyt0aGlzLmluZGV4LHRoaXMuemVybyt0aGlzLmluZGV4K28pO3JldHVybiB0aGlzLmluZGV4Kz1vLHV9LG4uZXhwb3J0cz1hfSx7Ii4uL3V0aWxzIjozMiwiLi9BcnJheVJlYWRlciI6MTd9XSwyMjpbZnVuY3Rpb24odCxuLHMpe3ZhciBpPXQoIi4uL3V0aWxzIiksYT10KCIuLi9zdXBwb3J0Iiksbz10KCIuL0FycmF5UmVhZGVyIiksdT10KCIuL1N0cmluZ1JlYWRlciIpLGw9dCgiLi9Ob2RlQnVmZmVyUmVhZGVyIiksQT10KCIuL1VpbnQ4QXJyYXlSZWFkZXIiKTtuLmV4cG9ydHM9ZnVuY3Rpb24oZCl7dmFyIGc9aS5nZXRUeXBlT2YoZCk7cmV0dXJuIGkuY2hlY2tTdXBwb3J0KGcpLGchPT0ic3RyaW5nInx8YS51aW50OGFycmF5P2c9PT0ibm9kZWJ1ZmZlciI/bmV3IGwoZCk6YS51aW50OGFycmF5P25ldyBBKGkudHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLGQpKTpuZXcgbyhpLnRyYW5zZm9ybVRvKCJhcnJheSIsZCkpOm5ldyB1KGQpfX0seyIuLi9zdXBwb3J0IjozMCwiLi4vdXRpbHMiOjMyLCIuL0FycmF5UmVhZGVyIjoxNywiLi9Ob2RlQnVmZmVyUmVhZGVyIjoxOSwiLi9TdHJpbmdSZWFkZXIiOjIwLCIuL1VpbnQ4QXJyYXlSZWFkZXIiOjIxfV0sMjM6W2Z1bmN0aW9uKHQsbixzKXtzLkxPQ0FMX0ZJTEVfSEVBREVSPSJQSwMEIixzLkNFTlRSQUxfRklMRV9IRUFERVI9IlBLAQIiLHMuQ0VOVFJBTF9ESVJFQ1RPUllfRU5EPSJQSwUGIixzLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1I9IlBLBlx4MDciLHMuWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfRU5EPSJQSwYGIixzLkRBVEFfREVTQ1JJUFRPUj0iUEtceDA3XGIifSx7fV0sMjQ6W2Z1bmN0aW9uKHQsbixzKXt2YXIgaT10KCIuL0dlbmVyaWNXb3JrZXIiKSxhPXQoIi4uL3V0aWxzIik7ZnVuY3Rpb24gbyh1KXtpLmNhbGwodGhpcywiQ29udmVydFdvcmtlciB0byAiK3UpLHRoaXMuZGVzdFR5cGU9dX1hLmluaGVyaXRzKG8saSksby5wcm90b3R5cGUucHJvY2Vzc0NodW5rPWZ1bmN0aW9uKHUpe3RoaXMucHVzaCh7ZGF0YTphLnRyYW5zZm9ybVRvKHRoaXMuZGVzdFR5cGUsdS5kYXRhKSxtZXRhOnUubWV0YX0pfSxuLmV4cG9ydHM9b30seyIuLi91dGlscyI6MzIsIi4vR2VuZXJpY1dvcmtlciI6Mjh9XSwyNTpbZnVuY3Rpb24odCxuLHMpe3ZhciBpPXQoIi4vR2VuZXJpY1dvcmtlciIpLGE9dCgiLi4vY3JjMzIiKTtmdW5jdGlvbiBvKCl7aS5jYWxsKHRoaXMsIkNyYzMyUHJvYmUiKSx0aGlzLndpdGhTdHJlYW1JbmZvKCJjcmMzMiIsMCl9dCgiLi4vdXRpbHMiKS5pbmhlcml0cyhvLGkpLG8ucHJvdG90eXBlLnByb2Nlc3NDaHVuaz1mdW5jdGlvbih1KXt0aGlzLnN0cmVhbUluZm8uY3JjMzI9YSh1LmRhdGEsdGhpcy5zdHJlYW1JbmZvLmNyYzMyfHwwKSx0aGlzLnB1c2godSl9LG4uZXhwb3J0cz1vfSx7Ii4uL2NyYzMyIjo0LCIuLi91dGlscyI6MzIsIi4vR2VuZXJpY1dvcmtlciI6Mjh9XSwyNjpbZnVuY3Rpb24odCxuLHMpe3ZhciBpPXQoIi4uL3V0aWxzIiksYT10KCIuL0dlbmVyaWNXb3JrZXIiKTtmdW5jdGlvbiBvKHUpe2EuY2FsbCh0aGlzLCJEYXRhTGVuZ3RoUHJvYmUgZm9yICIrdSksdGhpcy5wcm9wTmFtZT11LHRoaXMud2l0aFN0cmVhbUluZm8odSwwKX1pLmluaGVyaXRzKG8sYSksby5wcm90b3R5cGUucHJvY2Vzc0NodW5rPWZ1bmN0aW9uKHUpe2lmKHUpe3ZhciBsPXRoaXMuc3RyZWFtSW5mb1t0aGlzLnByb3BOYW1lXXx8MDt0aGlzLnN0cmVhbUluZm9bdGhpcy5wcm9wTmFtZV09bCt1LmRhdGEubGVuZ3RofWEucHJvdG90eXBlLnByb2Nlc3NDaHVuay5jYWxsKHRoaXMsdSl9LG4uZXhwb3J0cz1vfSx7Ii4uL3V0aWxzIjozMiwiLi9HZW5lcmljV29ya2VyIjoyOH1dLDI3OltmdW5jdGlvbih0LG4scyl7dmFyIGk9dCgiLi4vdXRpbHMiKSxhPXQoIi4vR2VuZXJpY1dvcmtlciIpO2Z1bmN0aW9uIG8odSl7YS5jYWxsKHRoaXMsIkRhdGFXb3JrZXIiKTt2YXIgbD10aGlzO3RoaXMuZGF0YUlzUmVhZHk9ITEsdGhpcy5pbmRleD0wLHRoaXMubWF4PTAsdGhpcy5kYXRhPW51bGwsdGhpcy50eXBlPSIiLHRoaXMuX3RpY2tTY2hlZHVsZWQ9ITEsdS50aGVuKGZ1bmN0aW9uKEEpe2wuZGF0YUlzUmVhZHk9ITAsbC5kYXRhPUEsbC5tYXg9QSYmQS5sZW5ndGh8fDAsbC50eXBlPWkuZ2V0VHlwZU9mKEEpLGwuaXNQYXVzZWR8fGwuX3RpY2tBbmRSZXBlYXQoKX0sZnVuY3Rpb24oQSl7bC5lcnJvcihBKX0pfWkuaW5oZXJpdHMobyxhKSxvLnByb3RvdHlwZS5jbGVhblVwPWZ1bmN0aW9uKCl7YS5wcm90b3R5cGUuY2xlYW5VcC5jYWxsKHRoaXMpLHRoaXMuZGF0YT1udWxsfSxvLnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXtyZXR1cm4hIWEucHJvdG90eXBlLnJlc3VtZS5jYWxsKHRoaXMpJiYoIXRoaXMuX3RpY2tTY2hlZHVsZWQmJnRoaXMuZGF0YUlzUmVhZHkmJih0aGlzLl90aWNrU2NoZWR1bGVkPSEwLGkuZGVsYXkodGhpcy5fdGlja0FuZFJlcGVhdCxbXSx0aGlzKSksITApfSxvLnByb3RvdHlwZS5fdGlja0FuZFJlcGVhdD1mdW5jdGlvbigpe3RoaXMuX3RpY2tTY2hlZHVsZWQ9ITEsdGhpcy5pc1BhdXNlZHx8dGhpcy5pc0ZpbmlzaGVkfHwodGhpcy5fdGljaygpLHRoaXMuaXNGaW5pc2hlZHx8KGkuZGVsYXkodGhpcy5fdGlja0FuZFJlcGVhdCxbXSx0aGlzKSx0aGlzLl90aWNrU2NoZWR1bGVkPSEwKSl9LG8ucHJvdG90eXBlLl90aWNrPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1BhdXNlZHx8dGhpcy5pc0ZpbmlzaGVkKXJldHVybiExO3ZhciB1PW51bGwsbD1NYXRoLm1pbih0aGlzLm1heCx0aGlzLmluZGV4KzE2Mzg0KTtpZih0aGlzLmluZGV4Pj10aGlzLm1heClyZXR1cm4gdGhpcy5lbmQoKTtzd2l0Y2godGhpcy50eXBlKXtjYXNlInN0cmluZyI6dT10aGlzLmRhdGEuc3Vic3RyaW5nKHRoaXMuaW5kZXgsbCk7YnJlYWs7Y2FzZSJ1aW50OGFycmF5Ijp1PXRoaXMuZGF0YS5zdWJhcnJheSh0aGlzLmluZGV4LGwpO2JyZWFrO2Nhc2UiYXJyYXkiOmNhc2Uibm9kZWJ1ZmZlciI6dT10aGlzLmRhdGEuc2xpY2UodGhpcy5pbmRleCxsKX1yZXR1cm4gdGhpcy5pbmRleD1sLHRoaXMucHVzaCh7ZGF0YTp1LG1ldGE6e3BlcmNlbnQ6dGhpcy5tYXg/dGhpcy5pbmRleC90aGlzLm1heCoxMDA6MH19KX0sbi5leHBvcnRzPW99LHsiLi4vdXRpbHMiOjMyLCIuL0dlbmVyaWNXb3JrZXIiOjI4fV0sMjg6W2Z1bmN0aW9uKHQsbixzKXtmdW5jdGlvbiBpKGEpe3RoaXMubmFtZT1hfHwiZGVmYXVsdCIsdGhpcy5zdHJlYW1JbmZvPXt9LHRoaXMuZ2VuZXJhdGVkRXJyb3I9bnVsbCx0aGlzLmV4dHJhU3RyZWFtSW5mbz17fSx0aGlzLmlzUGF1c2VkPSEwLHRoaXMuaXNGaW5pc2hlZD0hMSx0aGlzLmlzTG9ja2VkPSExLHRoaXMuX2xpc3RlbmVycz17ZGF0YTpbXSxlbmQ6W10sZXJyb3I6W119LHRoaXMucHJldmlvdXM9bnVsbH1pLnByb3RvdHlwZT17cHVzaDpmdW5jdGlvbihhKXt0aGlzLmVtaXQoImRhdGEiLGEpfSxlbmQ6ZnVuY3Rpb24oKXtpZih0aGlzLmlzRmluaXNoZWQpcmV0dXJuITE7dGhpcy5mbHVzaCgpO3RyeXt0aGlzLmVtaXQoImVuZCIpLHRoaXMuY2xlYW5VcCgpLHRoaXMuaXNGaW5pc2hlZD0hMH1jYXRjaChhKXt0aGlzLmVtaXQoImVycm9yIixhKX1yZXR1cm4hMH0sZXJyb3I6ZnVuY3Rpb24oYSl7cmV0dXJuIXRoaXMuaXNGaW5pc2hlZCYmKHRoaXMuaXNQYXVzZWQ/dGhpcy5nZW5lcmF0ZWRFcnJvcj1hOih0aGlzLmlzRmluaXNoZWQ9ITAsdGhpcy5lbWl0KCJlcnJvciIsYSksdGhpcy5wcmV2aW91cyYmdGhpcy5wcmV2aW91cy5lcnJvcihhKSx0aGlzLmNsZWFuVXAoKSksITApfSxvbjpmdW5jdGlvbihhLG8pe3JldHVybiB0aGlzLl9saXN0ZW5lcnNbYV0ucHVzaChvKSx0aGlzfSxjbGVhblVwOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW1JbmZvPXRoaXMuZ2VuZXJhdGVkRXJyb3I9dGhpcy5leHRyYVN0cmVhbUluZm89bnVsbCx0aGlzLl9saXN0ZW5lcnM9W119LGVtaXQ6ZnVuY3Rpb24oYSxvKXtpZih0aGlzLl9saXN0ZW5lcnNbYV0pZm9yKHZhciB1PTA7dTx0aGlzLl9saXN0ZW5lcnNbYV0ubGVuZ3RoO3UrKyl0aGlzLl9saXN0ZW5lcnNbYV1bdV0uY2FsbCh0aGlzLG8pfSxwaXBlOmZ1bmN0aW9uKGEpe3JldHVybiBhLnJlZ2lzdGVyUHJldmlvdXModGhpcyl9LHJlZ2lzdGVyUHJldmlvdXM6ZnVuY3Rpb24oYSl7aWYodGhpcy5pc0xvY2tlZCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBzdHJlYW0gJyIrdGhpcysiJyBoYXMgYWxyZWFkeSBiZWVuIHVzZWQuIik7dGhpcy5zdHJlYW1JbmZvPWEuc3RyZWFtSW5mbyx0aGlzLm1lcmdlU3RyZWFtSW5mbygpLHRoaXMucHJldmlvdXM9YTt2YXIgbz10aGlzO3JldHVybiBhLm9uKCJkYXRhIixmdW5jdGlvbih1KXtvLnByb2Nlc3NDaHVuayh1KX0pLGEub24oImVuZCIsZnVuY3Rpb24oKXtvLmVuZCgpfSksYS5vbigiZXJyb3IiLGZ1bmN0aW9uKHUpe28uZXJyb3IodSl9KSx0aGlzfSxwYXVzZTpmdW5jdGlvbigpe3JldHVybiF0aGlzLmlzUGF1c2VkJiYhdGhpcy5pc0ZpbmlzaGVkJiYodGhpcy5pc1BhdXNlZD0hMCx0aGlzLnByZXZpb3VzJiZ0aGlzLnByZXZpb3VzLnBhdXNlKCksITApfSxyZXN1bWU6ZnVuY3Rpb24oKXtpZighdGhpcy5pc1BhdXNlZHx8dGhpcy5pc0ZpbmlzaGVkKXJldHVybiExO3ZhciBhPXRoaXMuaXNQYXVzZWQ9ITE7cmV0dXJuIHRoaXMuZ2VuZXJhdGVkRXJyb3ImJih0aGlzLmVycm9yKHRoaXMuZ2VuZXJhdGVkRXJyb3IpLGE9ITApLHRoaXMucHJldmlvdXMmJnRoaXMucHJldmlvdXMucmVzdW1lKCksIWF9LGZsdXNoOmZ1bmN0aW9uKCl7fSxwcm9jZXNzQ2h1bms6ZnVuY3Rpb24oYSl7dGhpcy5wdXNoKGEpfSx3aXRoU3RyZWFtSW5mbzpmdW5jdGlvbihhLG8pe3JldHVybiB0aGlzLmV4dHJhU3RyZWFtSW5mb1thXT1vLHRoaXMubWVyZ2VTdHJlYW1JbmZvKCksdGhpc30sbWVyZ2VTdHJlYW1JbmZvOmZ1bmN0aW9uKCl7Zm9yKHZhciBhIGluIHRoaXMuZXh0cmFTdHJlYW1JbmZvKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmV4dHJhU3RyZWFtSW5mbyxhKSYmKHRoaXMuc3RyZWFtSW5mb1thXT10aGlzLmV4dHJhU3RyZWFtSW5mb1thXSl9LGxvY2s6ZnVuY3Rpb24oKXtpZih0aGlzLmlzTG9ja2VkKXRocm93IG5ldyBFcnJvcigiVGhlIHN0cmVhbSAnIit0aGlzKyInIGhhcyBhbHJlYWR5IGJlZW4gdXNlZC4iKTt0aGlzLmlzTG9ja2VkPSEwLHRoaXMucHJldmlvdXMmJnRoaXMucHJldmlvdXMubG9jaygpfSx0b1N0cmluZzpmdW5jdGlvbigpe3ZhciBhPSJXb3JrZXIgIit0aGlzLm5hbWU7cmV0dXJuIHRoaXMucHJldmlvdXM/dGhpcy5wcmV2aW91cysiIC0+ICIrYTphfX0sbi5leHBvcnRzPWl9LHt9XSwyOTpbZnVuY3Rpb24odCxuLHMpe3ZhciBpPXQoIi4uL3V0aWxzIiksYT10KCIuL0NvbnZlcnRXb3JrZXIiKSxvPXQoIi4vR2VuZXJpY1dvcmtlciIpLHU9dCgiLi4vYmFzZTY0IiksbD10KCIuLi9zdXBwb3J0IiksQT10KCIuLi9leHRlcm5hbCIpLGQ9bnVsbDtpZihsLm5vZGVzdHJlYW0pdHJ5e2Q9dCgiLi4vbm9kZWpzL05vZGVqc1N0cmVhbU91dHB1dEFkYXB0ZXIiKX1jYXRjaHt9ZnVuY3Rpb24gZyhDLHApe3JldHVybiBuZXcgQS5Qcm9taXNlKGZ1bmN0aW9uKGIsbSl7dmFyIEU9W10sdz1DLl9pbnRlcm5hbFR5cGUsTj1DLl9vdXRwdXRUeXBlLEk9Qy5fbWltZVR5cGU7Qy5vbigiZGF0YSIsZnVuY3Rpb24oUixNKXtFLnB1c2goUikscCYmcChNKX0pLm9uKCJlcnJvciIsZnVuY3Rpb24oUil7RT1bXSxtKFIpfSkub24oImVuZCIsZnVuY3Rpb24oKXt0cnl7dmFyIFI9ZnVuY3Rpb24oTSxXLE8pe3N3aXRjaChNKXtjYXNlImJsb2IiOnJldHVybiBpLm5ld0Jsb2IoaS50cmFuc2Zvcm1UbygiYXJyYXlidWZmZXIiLFcpLE8pO2Nhc2UiYmFzZTY0IjpyZXR1cm4gdS5lbmNvZGUoVyk7ZGVmYXVsdDpyZXR1cm4gaS50cmFuc2Zvcm1UbyhNLFcpfX0oTixmdW5jdGlvbihNLFcpe3ZhciBPLFY9MCxYPW51bGwsdj0wO2ZvcihPPTA7TzxXLmxlbmd0aDtPKyspdis9V1tPXS5sZW5ndGg7c3dpdGNoKE0pe2Nhc2Uic3RyaW5nIjpyZXR1cm4gVy5qb2luKCIiKTtjYXNlImFycmF5IjpyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSxXKTtjYXNlInVpbnQ4YXJyYXkiOmZvcihYPW5ldyBVaW50OEFycmF5KHYpLE89MDtPPFcubGVuZ3RoO08rKylYLnNldChXW09dLFYpLFYrPVdbT10ubGVuZ3RoO3JldHVybiBYO2Nhc2Uibm9kZWJ1ZmZlciI6cmV0dXJuIEJ1ZmZlci5jb25jYXQoVyk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImNvbmNhdCA6IHVuc3VwcG9ydGVkIHR5cGUgJyIrTSsiJyIpfX0odyxFKSxJKTtiKFIpfWNhdGNoKE0pe20oTSl9RT1bXX0pLnJlc3VtZSgpfSl9ZnVuY3Rpb24gZihDLHAsYil7dmFyIG09cDtzd2l0Y2gocCl7Y2FzZSJibG9iIjpjYXNlImFycmF5YnVmZmVyIjptPSJ1aW50OGFycmF5IjticmVhaztjYXNlImJhc2U2NCI6bT0ic3RyaW5nIn10cnl7dGhpcy5faW50ZXJuYWxUeXBlPW0sdGhpcy5fb3V0cHV0VHlwZT1wLHRoaXMuX21pbWVUeXBlPWIsaS5jaGVja1N1cHBvcnQobSksdGhpcy5fd29ya2VyPUMucGlwZShuZXcgYShtKSksQy5sb2NrKCl9Y2F0Y2goRSl7dGhpcy5fd29ya2VyPW5ldyBvKCJlcnJvciIpLHRoaXMuX3dvcmtlci5lcnJvcihFKX19Zi5wcm90b3R5cGU9e2FjY3VtdWxhdGU6ZnVuY3Rpb24oQyl7cmV0dXJuIGcodGhpcyxDKX0sb246ZnVuY3Rpb24oQyxwKXt2YXIgYj10aGlzO3JldHVybiBDPT09ImRhdGEiP3RoaXMuX3dvcmtlci5vbihDLGZ1bmN0aW9uKG0pe3AuY2FsbChiLG0uZGF0YSxtLm1ldGEpfSk6dGhpcy5fd29ya2VyLm9uKEMsZnVuY3Rpb24oKXtpLmRlbGF5KHAsYXJndW1lbnRzLGIpfSksdGhpc30scmVzdW1lOmZ1bmN0aW9uKCl7cmV0dXJuIGkuZGVsYXkodGhpcy5fd29ya2VyLnJlc3VtZSxbXSx0aGlzLl93b3JrZXIpLHRoaXN9LHBhdXNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dvcmtlci5wYXVzZSgpLHRoaXN9LHRvTm9kZWpzU3RyZWFtOmZ1bmN0aW9uKEMpe2lmKGkuY2hlY2tTdXBwb3J0KCJub2Rlc3RyZWFtIiksdGhpcy5fb3V0cHV0VHlwZSE9PSJub2RlYnVmZmVyIil0aHJvdyBuZXcgRXJyb3IodGhpcy5fb3V0cHV0VHlwZSsiIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBtZXRob2QiKTtyZXR1cm4gbmV3IGQodGhpcyx7b2JqZWN0TW9kZTp0aGlzLl9vdXRwdXRUeXBlIT09Im5vZGVidWZmZXIifSxDKX19LG4uZXhwb3J0cz1mfSx7Ii4uL2Jhc2U2NCI6MSwiLi4vZXh0ZXJuYWwiOjYsIi4uL25vZGVqcy9Ob2RlanNTdHJlYW1PdXRwdXRBZGFwdGVyIjoxMywiLi4vc3VwcG9ydCI6MzAsIi4uL3V0aWxzIjozMiwiLi9Db252ZXJ0V29ya2VyIjoyNCwiLi9HZW5lcmljV29ya2VyIjoyOH1dLDMwOltmdW5jdGlvbih0LG4scyl7aWYocy5iYXNlNjQ9ITAscy5hcnJheT0hMCxzLnN0cmluZz0hMCxzLmFycmF5YnVmZmVyPXR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJnR5cGVvZiBVaW50OEFycmF5PCJ1IixzLm5vZGVidWZmZXI9dHlwZW9mIEJ1ZmZlcjwidSIscy51aW50OGFycmF5PXR5cGVvZiBVaW50OEFycmF5PCJ1Iix0eXBlb2YgQXJyYXlCdWZmZXI+InUiKXMuYmxvYj0hMTtlbHNle3ZhciBpPW5ldyBBcnJheUJ1ZmZlcigwKTt0cnl7cy5ibG9iPW5ldyBCbG9iKFtpXSx7dHlwZToiYXBwbGljYXRpb24vemlwIn0pLnNpemU9PT0wfWNhdGNoe3RyeXt2YXIgYT1uZXcoc2VsZi5CbG9iQnVpbGRlcnx8c2VsZi5XZWJLaXRCbG9iQnVpbGRlcnx8c2VsZi5Nb3pCbG9iQnVpbGRlcnx8c2VsZi5NU0Jsb2JCdWlsZGVyKTthLmFwcGVuZChpKSxzLmJsb2I9YS5nZXRCbG9iKCJhcHBsaWNhdGlvbi96aXAiKS5zaXplPT09MH1jYXRjaHtzLmJsb2I9ITF9fX10cnl7cy5ub2Rlc3RyZWFtPSEhdCgicmVhZGFibGUtc3RyZWFtIikuUmVhZGFibGV9Y2F0Y2h7cy5ub2Rlc3RyZWFtPSExfX0seyJyZWFkYWJsZS1zdHJlYW0iOjE2fV0sMzE6W2Z1bmN0aW9uKHQsbixzKXtmb3IodmFyIGk9dCgiLi91dGlscyIpLGE9dCgiLi9zdXBwb3J0Iiksbz10KCIuL25vZGVqc1V0aWxzIiksdT10KCIuL3N0cmVhbS9HZW5lcmljV29ya2VyIiksbD1uZXcgQXJyYXkoMjU2KSxBPTA7QTwyNTY7QSsrKWxbQV09MjUyPD1BPzY6MjQ4PD1BPzU6MjQwPD1BPzQ6MjI0PD1BPzM6MTkyPD1BPzI6MTtsWzI1NF09bFsyNTRdPTE7ZnVuY3Rpb24gZCgpe3UuY2FsbCh0aGlzLCJ1dGYtOCBkZWNvZGUiKSx0aGlzLmxlZnRPdmVyPW51bGx9ZnVuY3Rpb24gZygpe3UuY2FsbCh0aGlzLCJ1dGYtOCBlbmNvZGUiKX1zLnV0ZjhlbmNvZGU9ZnVuY3Rpb24oZil7cmV0dXJuIGEubm9kZWJ1ZmZlcj9vLm5ld0J1ZmZlckZyb20oZiwidXRmLTgiKTpmdW5jdGlvbihDKXt2YXIgcCxiLG0sRSx3LE49Qy5sZW5ndGgsST0wO2ZvcihFPTA7RTxOO0UrKykoNjQ1MTImKGI9Qy5jaGFyQ29kZUF0KEUpKSk9PTU1Mjk2JiZFKzE8TiYmKDY0NTEyJihtPUMuY2hhckNvZGVBdChFKzEpKSk9PTU2MzIwJiYoYj02NTUzNisoYi01NTI5Njw8MTApKyhtLTU2MzIwKSxFKyspLEkrPWI8MTI4PzE6YjwyMDQ4PzI6Yjw2NTUzNj8zOjQ7Zm9yKHA9YS51aW50OGFycmF5P25ldyBVaW50OEFycmF5KEkpOm5ldyBBcnJheShJKSxFPXc9MDt3PEk7RSsrKSg2NDUxMiYoYj1DLmNoYXJDb2RlQXQoRSkpKT09NTUyOTYmJkUrMTxOJiYoNjQ1MTImKG09Qy5jaGFyQ29kZUF0KEUrMSkpKT09NTYzMjAmJihiPTY1NTM2KyhiLTU1Mjk2PDwxMCkrKG0tNTYzMjApLEUrKyksYjwxMjg/cFt3KytdPWI6KGI8MjA0OD9wW3crK109MTkyfGI+Pj42OihiPDY1NTM2P3BbdysrXT0yMjR8Yj4+PjEyOihwW3crK109MjQwfGI+Pj4xOCxwW3crK109MTI4fGI+Pj4xMiY2MykscFt3KytdPTEyOHxiPj4+NiY2MykscFt3KytdPTEyOHw2MyZiKTtyZXR1cm4gcH0oZil9LHMudXRmOGRlY29kZT1mdW5jdGlvbihmKXtyZXR1cm4gYS5ub2RlYnVmZmVyP2kudHJhbnNmb3JtVG8oIm5vZGVidWZmZXIiLGYpLnRvU3RyaW5nKCJ1dGYtOCIpOmZ1bmN0aW9uKEMpe3ZhciBwLGIsbSxFLHc9Qy5sZW5ndGgsTj1uZXcgQXJyYXkoMip3KTtmb3IocD1iPTA7cDx3OylpZigobT1DW3ArK10pPDEyOClOW2IrK109bTtlbHNlIGlmKDQ8KEU9bFttXSkpTltiKytdPTY1NTMzLHArPUUtMTtlbHNle2ZvcihtJj1FPT09Mj8zMTpFPT09Mz8xNTo3OzE8RSYmcDx3OyltPW08PDZ8NjMmQ1twKytdLEUtLTsxPEU/TltiKytdPTY1NTMzOm08NjU1MzY/TltiKytdPW06KG0tPTY1NTM2LE5bYisrXT01NTI5NnxtPj4xMCYxMDIzLE5bYisrXT01NjMyMHwxMDIzJm0pfXJldHVybiBOLmxlbmd0aCE9PWImJihOLnN1YmFycmF5P049Ti5zdWJhcnJheSgwLGIpOk4ubGVuZ3RoPWIpLGkuYXBwbHlGcm9tQ2hhckNvZGUoTil9KGY9aS50cmFuc2Zvcm1UbyhhLnVpbnQ4YXJyYXk/InVpbnQ4YXJyYXkiOiJhcnJheSIsZikpfSxpLmluaGVyaXRzKGQsdSksZC5wcm90b3R5cGUucHJvY2Vzc0NodW5rPWZ1bmN0aW9uKGYpe3ZhciBDPWkudHJhbnNmb3JtVG8oYS51aW50OGFycmF5PyJ1aW50OGFycmF5IjoiYXJyYXkiLGYuZGF0YSk7aWYodGhpcy5sZWZ0T3ZlciYmdGhpcy5sZWZ0T3Zlci5sZW5ndGgpe2lmKGEudWludDhhcnJheSl7dmFyIHA9QzsoQz1uZXcgVWludDhBcnJheShwLmxlbmd0aCt0aGlzLmxlZnRPdmVyLmxlbmd0aCkpLnNldCh0aGlzLmxlZnRPdmVyLDApLEMuc2V0KHAsdGhpcy5sZWZ0T3Zlci5sZW5ndGgpfWVsc2UgQz10aGlzLmxlZnRPdmVyLmNvbmNhdChDKTt0aGlzLmxlZnRPdmVyPW51bGx9dmFyIGI9ZnVuY3Rpb24oRSx3KXt2YXIgTjtmb3IoKHc9d3x8RS5sZW5ndGgpPkUubGVuZ3RoJiYodz1FLmxlbmd0aCksTj13LTE7MDw9TiYmKDE5MiZFW05dKT09MTI4OylOLS07cmV0dXJuIE48MHx8Tj09PTA/dzpOK2xbRVtOXV0+dz9OOnd9KEMpLG09QztiIT09Qy5sZW5ndGgmJihhLnVpbnQ4YXJyYXk/KG09Qy5zdWJhcnJheSgwLGIpLHRoaXMubGVmdE92ZXI9Qy5zdWJhcnJheShiLEMubGVuZ3RoKSk6KG09Qy5zbGljZSgwLGIpLHRoaXMubGVmdE92ZXI9Qy5zbGljZShiLEMubGVuZ3RoKSkpLHRoaXMucHVzaCh7ZGF0YTpzLnV0ZjhkZWNvZGUobSksbWV0YTpmLm1ldGF9KX0sZC5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXt0aGlzLmxlZnRPdmVyJiZ0aGlzLmxlZnRPdmVyLmxlbmd0aCYmKHRoaXMucHVzaCh7ZGF0YTpzLnV0ZjhkZWNvZGUodGhpcy5sZWZ0T3ZlciksbWV0YTp7fX0pLHRoaXMubGVmdE92ZXI9bnVsbCl9LHMuVXRmOERlY29kZVdvcmtlcj1kLGkuaW5oZXJpdHMoZyx1KSxnLnByb3RvdHlwZS5wcm9jZXNzQ2h1bms9ZnVuY3Rpb24oZil7dGhpcy5wdXNoKHtkYXRhOnMudXRmOGVuY29kZShmLmRhdGEpLG1ldGE6Zi5tZXRhfSl9LHMuVXRmOEVuY29kZVdvcmtlcj1nfSx7Ii4vbm9kZWpzVXRpbHMiOjE0LCIuL3N0cmVhbS9HZW5lcmljV29ya2VyIjoyOCwiLi9zdXBwb3J0IjozMCwiLi91dGlscyI6MzJ9XSwzMjpbZnVuY3Rpb24odCxuLHMpe3ZhciBpPXQoIi4vc3VwcG9ydCIpLGE9dCgiLi9iYXNlNjQiKSxvPXQoIi4vbm9kZWpzVXRpbHMiKSx1PXQoIi4vZXh0ZXJuYWwiKTtmdW5jdGlvbiBsKHApe3JldHVybiBwfWZ1bmN0aW9uIEEocCxiKXtmb3IodmFyIG09MDttPHAubGVuZ3RoOysrbSliW21dPTI1NSZwLmNoYXJDb2RlQXQobSk7cmV0dXJuIGJ9dCgic2V0aW1tZWRpYXRlIikscy5uZXdCbG9iPWZ1bmN0aW9uKHAsYil7cy5jaGVja1N1cHBvcnQoImJsb2IiKTt0cnl7cmV0dXJuIG5ldyBCbG9iKFtwXSx7dHlwZTpifSl9Y2F0Y2h7dHJ5e3ZhciBtPW5ldyhzZWxmLkJsb2JCdWlsZGVyfHxzZWxmLldlYktpdEJsb2JCdWlsZGVyfHxzZWxmLk1vekJsb2JCdWlsZGVyfHxzZWxmLk1TQmxvYkJ1aWxkZXIpO3JldHVybiBtLmFwcGVuZChwKSxtLmdldEJsb2IoYil9Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJCdWcgOiBjYW4ndCBjb25zdHJ1Y3QgdGhlIEJsb2IuIil9fX07dmFyIGQ9e3N0cmluZ2lmeUJ5Q2h1bms6ZnVuY3Rpb24ocCxiLG0pe3ZhciBFPVtdLHc9MCxOPXAubGVuZ3RoO2lmKE48PW0pcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxwKTtmb3IoO3c8TjspYj09PSJhcnJheSJ8fGI9PT0ibm9kZWJ1ZmZlciI/RS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxwLnNsaWNlKHcsTWF0aC5taW4odyttLE4pKSkpOkUucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwscC5zdWJhcnJheSh3LE1hdGgubWluKHcrbSxOKSkpKSx3Kz1tO3JldHVybiBFLmpvaW4oIiIpfSxzdHJpbmdpZnlCeUNoYXI6ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPSIiLG09MDttPHAubGVuZ3RoO20rKyliKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHBbbV0pO3JldHVybiBifSxhcHBseUNhbkJlVXNlZDp7dWludDhhcnJheTpmdW5jdGlvbigpe3RyeXtyZXR1cm4gaS51aW50OGFycmF5JiZTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbmV3IFVpbnQ4QXJyYXkoMSkpLmxlbmd0aD09PTF9Y2F0Y2h7cmV0dXJuITF9fSgpLG5vZGVidWZmZXI6ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIGkubm9kZWJ1ZmZlciYmU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLG8uYWxsb2NCdWZmZXIoMSkpLmxlbmd0aD09PTF9Y2F0Y2h7cmV0dXJuITF9fSgpfX07ZnVuY3Rpb24gZyhwKXt2YXIgYj02NTUzNixtPXMuZ2V0VHlwZU9mKHApLEU9ITA7aWYobT09PSJ1aW50OGFycmF5Ij9FPWQuYXBwbHlDYW5CZVVzZWQudWludDhhcnJheTptPT09Im5vZGVidWZmZXIiJiYoRT1kLmFwcGx5Q2FuQmVVc2VkLm5vZGVidWZmZXIpLEUpZm9yKDsxPGI7KXRyeXtyZXR1cm4gZC5zdHJpbmdpZnlCeUNodW5rKHAsbSxiKX1jYXRjaHtiPU1hdGguZmxvb3IoYi8yKX1yZXR1cm4gZC5zdHJpbmdpZnlCeUNoYXIocCl9ZnVuY3Rpb24gZihwLGIpe2Zvcih2YXIgbT0wO208cC5sZW5ndGg7bSsrKWJbbV09cFttXTtyZXR1cm4gYn1zLmFwcGx5RnJvbUNoYXJDb2RlPWc7dmFyIEM9e307Qy5zdHJpbmc9e3N0cmluZzpsLGFycmF5OmZ1bmN0aW9uKHApe3JldHVybiBBKHAsbmV3IEFycmF5KHAubGVuZ3RoKSl9LGFycmF5YnVmZmVyOmZ1bmN0aW9uKHApe3JldHVybiBDLnN0cmluZy51aW50OGFycmF5KHApLmJ1ZmZlcn0sdWludDhhcnJheTpmdW5jdGlvbihwKXtyZXR1cm4gQShwLG5ldyBVaW50OEFycmF5KHAubGVuZ3RoKSl9LG5vZGVidWZmZXI6ZnVuY3Rpb24ocCl7cmV0dXJuIEEocCxvLmFsbG9jQnVmZmVyKHAubGVuZ3RoKSl9fSxDLmFycmF5PXtzdHJpbmc6ZyxhcnJheTpsLGFycmF5YnVmZmVyOmZ1bmN0aW9uKHApe3JldHVybiBuZXcgVWludDhBcnJheShwKS5idWZmZXJ9LHVpbnQ4YXJyYXk6ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyBVaW50OEFycmF5KHApfSxub2RlYnVmZmVyOmZ1bmN0aW9uKHApe3JldHVybiBvLm5ld0J1ZmZlckZyb20ocCl9fSxDLmFycmF5YnVmZmVyPXtzdHJpbmc6ZnVuY3Rpb24ocCl7cmV0dXJuIGcobmV3IFVpbnQ4QXJyYXkocCkpfSxhcnJheTpmdW5jdGlvbihwKXtyZXR1cm4gZihuZXcgVWludDhBcnJheShwKSxuZXcgQXJyYXkocC5ieXRlTGVuZ3RoKSl9LGFycmF5YnVmZmVyOmwsdWludDhhcnJheTpmdW5jdGlvbihwKXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkocCl9LG5vZGVidWZmZXI6ZnVuY3Rpb24ocCl7cmV0dXJuIG8ubmV3QnVmZmVyRnJvbShuZXcgVWludDhBcnJheShwKSl9fSxDLnVpbnQ4YXJyYXk9e3N0cmluZzpnLGFycmF5OmZ1bmN0aW9uKHApe3JldHVybiBmKHAsbmV3IEFycmF5KHAubGVuZ3RoKSl9LGFycmF5YnVmZmVyOmZ1bmN0aW9uKHApe3JldHVybiBwLmJ1ZmZlcn0sdWludDhhcnJheTpsLG5vZGVidWZmZXI6ZnVuY3Rpb24ocCl7cmV0dXJuIG8ubmV3QnVmZmVyRnJvbShwKX19LEMubm9kZWJ1ZmZlcj17c3RyaW5nOmcsYXJyYXk6ZnVuY3Rpb24ocCl7cmV0dXJuIGYocCxuZXcgQXJyYXkocC5sZW5ndGgpKX0sYXJyYXlidWZmZXI6ZnVuY3Rpb24ocCl7cmV0dXJuIEMubm9kZWJ1ZmZlci51aW50OGFycmF5KHApLmJ1ZmZlcn0sdWludDhhcnJheTpmdW5jdGlvbihwKXtyZXR1cm4gZihwLG5ldyBVaW50OEFycmF5KHAubGVuZ3RoKSl9LG5vZGVidWZmZXI6bH0scy50cmFuc2Zvcm1Ubz1mdW5jdGlvbihwLGIpe2lmKGI9Ynx8IiIsIXApcmV0dXJuIGI7cy5jaGVja1N1cHBvcnQocCk7dmFyIG09cy5nZXRUeXBlT2YoYik7cmV0dXJuIENbbV1bcF0oYil9LHMucmVzb2x2ZT1mdW5jdGlvbihwKXtmb3IodmFyIGI9cC5zcGxpdCgiLyIpLG09W10sRT0wO0U8Yi5sZW5ndGg7RSsrKXt2YXIgdz1iW0VdO3c9PT0iLiJ8fHc9PT0iIiYmRSE9PTAmJkUhPT1iLmxlbmd0aC0xfHwodz09PSIuLiI/bS5wb3AoKTptLnB1c2godykpfXJldHVybiBtLmpvaW4oIi8iKX0scy5nZXRUeXBlT2Y9ZnVuY3Rpb24ocCl7cmV0dXJuIHR5cGVvZiBwPT0ic3RyaW5nIj8ic3RyaW5nIjpPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocCk9PT0iW29iamVjdCBBcnJheV0iPyJhcnJheSI6aS5ub2RlYnVmZmVyJiZvLmlzQnVmZmVyKHApPyJub2RlYnVmZmVyIjppLnVpbnQ4YXJyYXkmJnAgaW5zdGFuY2VvZiBVaW50OEFycmF5PyJ1aW50OGFycmF5IjppLmFycmF5YnVmZmVyJiZwIGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/ImFycmF5YnVmZmVyIjp2b2lkIDB9LHMuY2hlY2tTdXBwb3J0PWZ1bmN0aW9uKHApe2lmKCFpW3AudG9Mb3dlckNhc2UoKV0pdGhyb3cgbmV3IEVycm9yKHArIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgcGxhdGZvcm0iKX0scy5NQVhfVkFMVUVfMTZCSVRTPTY1NTM1LHMuTUFYX1ZBTFVFXzMyQklUUz0tMSxzLnByZXR0eT1mdW5jdGlvbihwKXt2YXIgYixtLEU9IiI7Zm9yKG09MDttPChwfHwiIikubGVuZ3RoO20rKylFKz0iXFx4IisoKGI9cC5jaGFyQ29kZUF0KG0pKTwxNj8iMCI6IiIpK2IudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7cmV0dXJuIEV9LHMuZGVsYXk9ZnVuY3Rpb24ocCxiLG0pe3NldEltbWVkaWF0ZShmdW5jdGlvbigpe3AuYXBwbHkobXx8bnVsbCxifHxbXSl9KX0scy5pbmhlcml0cz1mdW5jdGlvbihwLGIpe2Z1bmN0aW9uIG0oKXt9bS5wcm90b3R5cGU9Yi5wcm90b3R5cGUscC5wcm90b3R5cGU9bmV3IG19LHMuZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIHAsYixtPXt9O2ZvcihwPTA7cDxhcmd1bWVudHMubGVuZ3RoO3ArKylmb3IoYiBpbiBhcmd1bWVudHNbcF0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFyZ3VtZW50c1twXSxiKSYmbVtiXT09PXZvaWQgMCYmKG1bYl09YXJndW1lbnRzW3BdW2JdKTtyZXR1cm4gbX0scy5wcmVwYXJlQ29udGVudD1mdW5jdGlvbihwLGIsbSxFLHcpe3JldHVybiB1LlByb21pc2UucmVzb2x2ZShiKS50aGVuKGZ1bmN0aW9uKE4pe3JldHVybiBpLmJsb2ImJihOIGluc3RhbmNlb2YgQmxvYnx8WyJbb2JqZWN0IEZpbGVdIiwiW29iamVjdCBCbG9iXSJdLmluZGV4T2YoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKE4pKSE9PS0xKSYmdHlwZW9mIEZpbGVSZWFkZXI8InUiP25ldyB1LlByb21pc2UoZnVuY3Rpb24oSSxSKXt2YXIgTT1uZXcgRmlsZVJlYWRlcjtNLm9ubG9hZD1mdW5jdGlvbihXKXtJKFcudGFyZ2V0LnJlc3VsdCl9LE0ub25lcnJvcj1mdW5jdGlvbihXKXtSKFcudGFyZ2V0LmVycm9yKX0sTS5yZWFkQXNBcnJheUJ1ZmZlcihOKX0pOk59KS50aGVuKGZ1bmN0aW9uKE4pe3ZhciBJPXMuZ2V0VHlwZU9mKE4pO3JldHVybiBJPyhJPT09ImFycmF5YnVmZmVyIj9OPXMudHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLE4pOkk9PT0ic3RyaW5nIiYmKHc/Tj1hLmRlY29kZShOKTptJiZFIT09ITAmJihOPWZ1bmN0aW9uKFIpe3JldHVybiBBKFIsaS51aW50OGFycmF5P25ldyBVaW50OEFycmF5KFIubGVuZ3RoKTpuZXcgQXJyYXkoUi5sZW5ndGgpKX0oTikpKSxOKTp1LlByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiQ2FuJ3QgcmVhZCB0aGUgZGF0YSBvZiAnIitwKyInLiBJcyBpdCBpbiBhIHN1cHBvcnRlZCBKYXZhU2NyaXB0IHR5cGUgKFN0cmluZywgQmxvYiwgQXJyYXlCdWZmZXIsIGV0YykgPyIpKX0pfX0seyIuL2Jhc2U2NCI6MSwiLi9leHRlcm5hbCI6NiwiLi9ub2RlanNVdGlscyI6MTQsIi4vc3VwcG9ydCI6MzAsc2V0aW1tZWRpYXRlOjU0fV0sMzM6W2Z1bmN0aW9uKHQsbixzKXt2YXIgaT10KCIuL3JlYWRlci9yZWFkZXJGb3IiKSxhPXQoIi4vdXRpbHMiKSxvPXQoIi4vc2lnbmF0dXJlIiksdT10KCIuL3ppcEVudHJ5IiksbD10KCIuL3N1cHBvcnQiKTtmdW5jdGlvbiBBKGQpe3RoaXMuZmlsZXM9W10sdGhpcy5sb2FkT3B0aW9ucz1kfUEucHJvdG90eXBlPXtjaGVja1NpZ25hdHVyZTpmdW5jdGlvbihkKXtpZighdGhpcy5yZWFkZXIucmVhZEFuZENoZWNrU2lnbmF0dXJlKGQpKXt0aGlzLnJlYWRlci5pbmRleC09NDt2YXIgZz10aGlzLnJlYWRlci5yZWFkU3RyaW5nKDQpO3Rocm93IG5ldyBFcnJvcigiQ29ycnVwdGVkIHppcCBvciBidWc6IHVuZXhwZWN0ZWQgc2lnbmF0dXJlICgiK2EucHJldHR5KGcpKyIsIGV4cGVjdGVkICIrYS5wcmV0dHkoZCkrIikiKX19LGlzU2lnbmF0dXJlOmZ1bmN0aW9uKGQsZyl7dmFyIGY9dGhpcy5yZWFkZXIuaW5kZXg7dGhpcy5yZWFkZXIuc2V0SW5kZXgoZCk7dmFyIEM9dGhpcy5yZWFkZXIucmVhZFN0cmluZyg0KT09PWc7cmV0dXJuIHRoaXMucmVhZGVyLnNldEluZGV4KGYpLEN9LHJlYWRCbG9ja0VuZE9mQ2VudHJhbDpmdW5jdGlvbigpe3RoaXMuZGlza051bWJlcj10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuZGlza1dpdGhDZW50cmFsRGlyU3RhcnQ9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzT25UaGlzRGlzaz10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuY2VudHJhbERpclJlY29yZHM9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmNlbnRyYWxEaXJTaXplPXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5jZW50cmFsRGlyT2Zmc2V0PXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy56aXBDb21tZW50TGVuZ3RoPXRoaXMucmVhZGVyLnJlYWRJbnQoMik7dmFyIGQ9dGhpcy5yZWFkZXIucmVhZERhdGEodGhpcy56aXBDb21tZW50TGVuZ3RoKSxnPWwudWludDhhcnJheT8idWludDhhcnJheSI6ImFycmF5IixmPWEudHJhbnNmb3JtVG8oZyxkKTt0aGlzLnppcENvbW1lbnQ9dGhpcy5sb2FkT3B0aW9ucy5kZWNvZGVGaWxlTmFtZShmKX0scmVhZEJsb2NrWmlwNjRFbmRPZkNlbnRyYWw6ZnVuY3Rpb24oKXt0aGlzLnppcDY0RW5kT2ZDZW50cmFsU2l6ZT10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMucmVhZGVyLnNraXAoNCksdGhpcy5kaXNrTnVtYmVyPXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5kaXNrV2l0aENlbnRyYWxEaXJTdGFydD10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuY2VudHJhbERpclJlY29yZHNPblRoaXNEaXNrPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy5jZW50cmFsRGlyUmVjb3Jkcz10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuY2VudHJhbERpclNpemU9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLmNlbnRyYWxEaXJPZmZzZXQ9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLnppcDY0RXh0ZW5zaWJsZURhdGE9e307Zm9yKHZhciBkLGcsZixDPXRoaXMuemlwNjRFbmRPZkNlbnRyYWxTaXplLTQ0OzA8QzspZD10aGlzLnJlYWRlci5yZWFkSW50KDIpLGc9dGhpcy5yZWFkZXIucmVhZEludCg0KSxmPXRoaXMucmVhZGVyLnJlYWREYXRhKGcpLHRoaXMuemlwNjRFeHRlbnNpYmxlRGF0YVtkXT17aWQ6ZCxsZW5ndGg6Zyx2YWx1ZTpmfX0scmVhZEJsb2NrWmlwNjRFbmRPZkNlbnRyYWxMb2NhdG9yOmZ1bmN0aW9uKCl7aWYodGhpcy5kaXNrV2l0aFppcDY0Q2VudHJhbERpclN0YXJ0PXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5yZWxhdGl2ZU9mZnNldEVuZE9mWmlwNjRDZW50cmFsRGlyPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy5kaXNrc0NvdW50PXRoaXMucmVhZGVyLnJlYWRJbnQoNCksMTx0aGlzLmRpc2tzQ291bnQpdGhyb3cgbmV3IEVycm9yKCJNdWx0aS12b2x1bWVzIHppcCBhcmUgbm90IHN1cHBvcnRlZCIpfSxyZWFkTG9jYWxGaWxlczpmdW5jdGlvbigpe3ZhciBkLGc7Zm9yKGQ9MDtkPHRoaXMuZmlsZXMubGVuZ3RoO2QrKylnPXRoaXMuZmlsZXNbZF0sdGhpcy5yZWFkZXIuc2V0SW5kZXgoZy5sb2NhbEhlYWRlck9mZnNldCksdGhpcy5jaGVja1NpZ25hdHVyZShvLkxPQ0FMX0ZJTEVfSEVBREVSKSxnLnJlYWRMb2NhbFBhcnQodGhpcy5yZWFkZXIpLGcuaGFuZGxlVVRGOCgpLGcucHJvY2Vzc0F0dHJpYnV0ZXMoKX0scmVhZENlbnRyYWxEaXI6ZnVuY3Rpb24oKXt2YXIgZDtmb3IodGhpcy5yZWFkZXIuc2V0SW5kZXgodGhpcy5jZW50cmFsRGlyT2Zmc2V0KTt0aGlzLnJlYWRlci5yZWFkQW5kQ2hlY2tTaWduYXR1cmUoby5DRU5UUkFMX0ZJTEVfSEVBREVSKTspKGQ9bmV3IHUoe3ppcDY0OnRoaXMuemlwNjR9LHRoaXMubG9hZE9wdGlvbnMpKS5yZWFkQ2VudHJhbFBhcnQodGhpcy5yZWFkZXIpLHRoaXMuZmlsZXMucHVzaChkKTtpZih0aGlzLmNlbnRyYWxEaXJSZWNvcmRzIT09dGhpcy5maWxlcy5sZW5ndGgmJnRoaXMuY2VudHJhbERpclJlY29yZHMhPT0wJiZ0aGlzLmZpbGVzLmxlbmd0aD09PTApdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwIG9yIGJ1ZzogZXhwZWN0ZWQgIit0aGlzLmNlbnRyYWxEaXJSZWNvcmRzKyIgcmVjb3JkcyBpbiBjZW50cmFsIGRpciwgZ290ICIrdGhpcy5maWxlcy5sZW5ndGgpfSxyZWFkRW5kT2ZDZW50cmFsOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5yZWFkZXIubGFzdEluZGV4T2ZTaWduYXR1cmUoby5DRU5UUkFMX0RJUkVDVE9SWV9FTkQpO2lmKGQ8MCl0aHJvdyB0aGlzLmlzU2lnbmF0dXJlKDAsby5MT0NBTF9GSUxFX0hFQURFUik/bmV3IEVycm9yKCJDb3JydXB0ZWQgemlwOiBjYW4ndCBmaW5kIGVuZCBvZiBjZW50cmFsIGRpcmVjdG9yeSIpOm5ldyBFcnJvcigiQ2FuJ3QgZmluZCBlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnkgOiBpcyB0aGlzIGEgemlwIGZpbGUgPyBJZiBpdCBpcywgc2VlIGh0dHBzOi8vc3R1ay5naXRodWIuaW8vanN6aXAvZG9jdW1lbnRhdGlvbi9ob3d0by9yZWFkX3ppcC5odG1sIik7dGhpcy5yZWFkZXIuc2V0SW5kZXgoZCk7dmFyIGc9ZDtpZih0aGlzLmNoZWNrU2lnbmF0dXJlKG8uQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKSx0aGlzLnJlYWRCbG9ja0VuZE9mQ2VudHJhbCgpLHRoaXMuZGlza051bWJlcj09PWEuTUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5kaXNrV2l0aENlbnRyYWxEaXJTdGFydD09PWEuTUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5jZW50cmFsRGlyUmVjb3Jkc09uVGhpc0Rpc2s9PT1hLk1BWF9WQUxVRV8xNkJJVFN8fHRoaXMuY2VudHJhbERpclJlY29yZHM9PT1hLk1BWF9WQUxVRV8xNkJJVFN8fHRoaXMuY2VudHJhbERpclNpemU9PT1hLk1BWF9WQUxVRV8zMkJJVFN8fHRoaXMuY2VudHJhbERpck9mZnNldD09PWEuTUFYX1ZBTFVFXzMyQklUUyl7aWYodGhpcy56aXA2ND0hMCwoZD10aGlzLnJlYWRlci5sYXN0SW5kZXhPZlNpZ25hdHVyZShvLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1IpKTwwKXRocm93IG5ldyBFcnJvcigiQ29ycnVwdGVkIHppcDogY2FuJ3QgZmluZCB0aGUgWklQNjQgZW5kIG9mIGNlbnRyYWwgZGlyZWN0b3J5IGxvY2F0b3IiKTtpZih0aGlzLnJlYWRlci5zZXRJbmRleChkKSx0aGlzLmNoZWNrU2lnbmF0dXJlKG8uWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUiksdGhpcy5yZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbExvY2F0b3IoKSwhdGhpcy5pc1NpZ25hdHVyZSh0aGlzLnJlbGF0aXZlT2Zmc2V0RW5kT2ZaaXA2NENlbnRyYWxEaXIsby5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9FTkQpJiYodGhpcy5yZWxhdGl2ZU9mZnNldEVuZE9mWmlwNjRDZW50cmFsRGlyPXRoaXMucmVhZGVyLmxhc3RJbmRleE9mU2lnbmF0dXJlKG8uWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKSx0aGlzLnJlbGF0aXZlT2Zmc2V0RW5kT2ZaaXA2NENlbnRyYWxEaXI8MCkpdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwOiBjYW4ndCBmaW5kIHRoZSBaSVA2NCBlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnkiKTt0aGlzLnJlYWRlci5zZXRJbmRleCh0aGlzLnJlbGF0aXZlT2Zmc2V0RW5kT2ZaaXA2NENlbnRyYWxEaXIpLHRoaXMuY2hlY2tTaWduYXR1cmUoby5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9FTkQpLHRoaXMucmVhZEJsb2NrWmlwNjRFbmRPZkNlbnRyYWwoKX12YXIgZj10aGlzLmNlbnRyYWxEaXJPZmZzZXQrdGhpcy5jZW50cmFsRGlyU2l6ZTt0aGlzLnppcDY0JiYoZis9MjAsZis9MTIrdGhpcy56aXA2NEVuZE9mQ2VudHJhbFNpemUpO3ZhciBDPWctZjtpZigwPEMpdGhpcy5pc1NpZ25hdHVyZShnLG8uQ0VOVFJBTF9GSUxFX0hFQURFUil8fCh0aGlzLnJlYWRlci56ZXJvPUMpO2Vsc2UgaWYoQzwwKXRocm93IG5ldyBFcnJvcigiQ29ycnVwdGVkIHppcDogbWlzc2luZyAiK01hdGguYWJzKEMpKyIgYnl0ZXMuIil9LHByZXBhcmVSZWFkZXI6ZnVuY3Rpb24oZCl7dGhpcy5yZWFkZXI9aShkKX0sbG9hZDpmdW5jdGlvbihkKXt0aGlzLnByZXBhcmVSZWFkZXIoZCksdGhpcy5yZWFkRW5kT2ZDZW50cmFsKCksdGhpcy5yZWFkQ2VudHJhbERpcigpLHRoaXMucmVhZExvY2FsRmlsZXMoKX19LG4uZXhwb3J0cz1BfSx7Ii4vcmVhZGVyL3JlYWRlckZvciI6MjIsIi4vc2lnbmF0dXJlIjoyMywiLi9zdXBwb3J0IjozMCwiLi91dGlscyI6MzIsIi4vemlwRW50cnkiOjM0fV0sMzQ6W2Z1bmN0aW9uKHQsbixzKXt2YXIgaT10KCIuL3JlYWRlci9yZWFkZXJGb3IiKSxhPXQoIi4vdXRpbHMiKSxvPXQoIi4vY29tcHJlc3NlZE9iamVjdCIpLHU9dCgiLi9jcmMzMiIpLGw9dCgiLi91dGY4IiksQT10KCIuL2NvbXByZXNzaW9ucyIpLGQ9dCgiLi9zdXBwb3J0Iik7ZnVuY3Rpb24gZyhmLEMpe3RoaXMub3B0aW9ucz1mLHRoaXMubG9hZE9wdGlvbnM9Q31nLnByb3RvdHlwZT17aXNFbmNyeXB0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4oMSZ0aGlzLmJpdEZsYWcpPT0xfSx1c2VVVEY4OmZ1bmN0aW9uKCl7cmV0dXJuKDIwNDgmdGhpcy5iaXRGbGFnKT09MjA0OH0scmVhZExvY2FsUGFydDpmdW5jdGlvbihmKXt2YXIgQyxwO2lmKGYuc2tpcCgyMiksdGhpcy5maWxlTmFtZUxlbmd0aD1mLnJlYWRJbnQoMikscD1mLnJlYWRJbnQoMiksdGhpcy5maWxlTmFtZT1mLnJlYWREYXRhKHRoaXMuZmlsZU5hbWVMZW5ndGgpLGYuc2tpcChwKSx0aGlzLmNvbXByZXNzZWRTaXplPT09LTF8fHRoaXMudW5jb21wcmVzc2VkU2l6ZT09PS0xKXRocm93IG5ldyBFcnJvcigiQnVnIG9yIGNvcnJ1cHRlZCB6aXAgOiBkaWRuJ3QgZ2V0IGVub3VnaCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBjZW50cmFsIGRpcmVjdG9yeSAoY29tcHJlc3NlZFNpemUgPT09IC0xIHx8IHVuY29tcHJlc3NlZFNpemUgPT09IC0xKSIpO2lmKChDPWZ1bmN0aW9uKGIpe2Zvcih2YXIgbSBpbiBBKWlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChBLG0pJiZBW21dLm1hZ2ljPT09YilyZXR1cm4gQVttXTtyZXR1cm4gbnVsbH0odGhpcy5jb21wcmVzc2lvbk1ldGhvZCkpPT09bnVsbCl0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXAgOiBjb21wcmVzc2lvbiAiK2EucHJldHR5KHRoaXMuY29tcHJlc3Npb25NZXRob2QpKyIgdW5rbm93biAoaW5uZXIgZmlsZSA6ICIrYS50cmFuc2Zvcm1Ubygic3RyaW5nIix0aGlzLmZpbGVOYW1lKSsiKSIpO3RoaXMuZGVjb21wcmVzc2VkPW5ldyBvKHRoaXMuY29tcHJlc3NlZFNpemUsdGhpcy51bmNvbXByZXNzZWRTaXplLHRoaXMuY3JjMzIsQyxmLnJlYWREYXRhKHRoaXMuY29tcHJlc3NlZFNpemUpKX0scmVhZENlbnRyYWxQYXJ0OmZ1bmN0aW9uKGYpe3RoaXMudmVyc2lvbk1hZGVCeT1mLnJlYWRJbnQoMiksZi5za2lwKDIpLHRoaXMuYml0RmxhZz1mLnJlYWRJbnQoMiksdGhpcy5jb21wcmVzc2lvbk1ldGhvZD1mLnJlYWRTdHJpbmcoMiksdGhpcy5kYXRlPWYucmVhZERhdGUoKSx0aGlzLmNyYzMyPWYucmVhZEludCg0KSx0aGlzLmNvbXByZXNzZWRTaXplPWYucmVhZEludCg0KSx0aGlzLnVuY29tcHJlc3NlZFNpemU9Zi5yZWFkSW50KDQpO3ZhciBDPWYucmVhZEludCgyKTtpZih0aGlzLmV4dHJhRmllbGRzTGVuZ3RoPWYucmVhZEludCgyKSx0aGlzLmZpbGVDb21tZW50TGVuZ3RoPWYucmVhZEludCgyKSx0aGlzLmRpc2tOdW1iZXJTdGFydD1mLnJlYWRJbnQoMiksdGhpcy5pbnRlcm5hbEZpbGVBdHRyaWJ1dGVzPWYucmVhZEludCgyKSx0aGlzLmV4dGVybmFsRmlsZUF0dHJpYnV0ZXM9Zi5yZWFkSW50KDQpLHRoaXMubG9jYWxIZWFkZXJPZmZzZXQ9Zi5yZWFkSW50KDQpLHRoaXMuaXNFbmNyeXB0ZWQoKSl0aHJvdyBuZXcgRXJyb3IoIkVuY3J5cHRlZCB6aXAgYXJlIG5vdCBzdXBwb3J0ZWQiKTtmLnNraXAoQyksdGhpcy5yZWFkRXh0cmFGaWVsZHMoZiksdGhpcy5wYXJzZVpJUDY0RXh0cmFGaWVsZChmKSx0aGlzLmZpbGVDb21tZW50PWYucmVhZERhdGEodGhpcy5maWxlQ29tbWVudExlbmd0aCl9LHByb2Nlc3NBdHRyaWJ1dGVzOmZ1bmN0aW9uKCl7dGhpcy51bml4UGVybWlzc2lvbnM9bnVsbCx0aGlzLmRvc1Blcm1pc3Npb25zPW51bGw7dmFyIGY9dGhpcy52ZXJzaW9uTWFkZUJ5Pj44O3RoaXMuZGlyPSEhKDE2JnRoaXMuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcyksZj09MCYmKHRoaXMuZG9zUGVybWlzc2lvbnM9NjMmdGhpcy5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzKSxmPT0zJiYodGhpcy51bml4UGVybWlzc2lvbnM9dGhpcy5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzPj4xNiY2NTUzNSksdGhpcy5kaXJ8fHRoaXMuZmlsZU5hbWVTdHIuc2xpY2UoLTEpIT09Ii8ifHwodGhpcy5kaXI9ITApfSxwYXJzZVpJUDY0RXh0cmFGaWVsZDpmdW5jdGlvbigpe2lmKHRoaXMuZXh0cmFGaWVsZHNbMV0pe3ZhciBmPWkodGhpcy5leHRyYUZpZWxkc1sxXS52YWx1ZSk7dGhpcy51bmNvbXByZXNzZWRTaXplPT09YS5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy51bmNvbXByZXNzZWRTaXplPWYucmVhZEludCg4KSksdGhpcy5jb21wcmVzc2VkU2l6ZT09PWEuTUFYX1ZBTFVFXzMyQklUUyYmKHRoaXMuY29tcHJlc3NlZFNpemU9Zi5yZWFkSW50KDgpKSx0aGlzLmxvY2FsSGVhZGVyT2Zmc2V0PT09YS5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy5sb2NhbEhlYWRlck9mZnNldD1mLnJlYWRJbnQoOCkpLHRoaXMuZGlza051bWJlclN0YXJ0PT09YS5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy5kaXNrTnVtYmVyU3RhcnQ9Zi5yZWFkSW50KDQpKX19LHJlYWRFeHRyYUZpZWxkczpmdW5jdGlvbihmKXt2YXIgQyxwLGIsbT1mLmluZGV4K3RoaXMuZXh0cmFGaWVsZHNMZW5ndGg7Zm9yKHRoaXMuZXh0cmFGaWVsZHN8fCh0aGlzLmV4dHJhRmllbGRzPXt9KTtmLmluZGV4KzQ8bTspQz1mLnJlYWRJbnQoMikscD1mLnJlYWRJbnQoMiksYj1mLnJlYWREYXRhKHApLHRoaXMuZXh0cmFGaWVsZHNbQ109e2lkOkMsbGVuZ3RoOnAsdmFsdWU6Yn07Zi5zZXRJbmRleChtKX0saGFuZGxlVVRGODpmdW5jdGlvbigpe3ZhciBmPWQudWludDhhcnJheT8idWludDhhcnJheSI6ImFycmF5IjtpZih0aGlzLnVzZVVURjgoKSl0aGlzLmZpbGVOYW1lU3RyPWwudXRmOGRlY29kZSh0aGlzLmZpbGVOYW1lKSx0aGlzLmZpbGVDb21tZW50U3RyPWwudXRmOGRlY29kZSh0aGlzLmZpbGVDb21tZW50KTtlbHNle3ZhciBDPXRoaXMuZmluZEV4dHJhRmllbGRVbmljb2RlUGF0aCgpO2lmKEMhPT1udWxsKXRoaXMuZmlsZU5hbWVTdHI9QztlbHNle3ZhciBwPWEudHJhbnNmb3JtVG8oZix0aGlzLmZpbGVOYW1lKTt0aGlzLmZpbGVOYW1lU3RyPXRoaXMubG9hZE9wdGlvbnMuZGVjb2RlRmlsZU5hbWUocCl9dmFyIGI9dGhpcy5maW5kRXh0cmFGaWVsZFVuaWNvZGVDb21tZW50KCk7aWYoYiE9PW51bGwpdGhpcy5maWxlQ29tbWVudFN0cj1iO2Vsc2V7dmFyIG09YS50cmFuc2Zvcm1UbyhmLHRoaXMuZmlsZUNvbW1lbnQpO3RoaXMuZmlsZUNvbW1lbnRTdHI9dGhpcy5sb2FkT3B0aW9ucy5kZWNvZGVGaWxlTmFtZShtKX19fSxmaW5kRXh0cmFGaWVsZFVuaWNvZGVQYXRoOmZ1bmN0aW9uKCl7dmFyIGY9dGhpcy5leHRyYUZpZWxkc1syODc4OV07aWYoZil7dmFyIEM9aShmLnZhbHVlKTtyZXR1cm4gQy5yZWFkSW50KDEpIT09MXx8dSh0aGlzLmZpbGVOYW1lKSE9PUMucmVhZEludCg0KT9udWxsOmwudXRmOGRlY29kZShDLnJlYWREYXRhKGYubGVuZ3RoLTUpKX1yZXR1cm4gbnVsbH0sZmluZEV4dHJhRmllbGRVbmljb2RlQ29tbWVudDpmdW5jdGlvbigpe3ZhciBmPXRoaXMuZXh0cmFGaWVsZHNbMjU0NjFdO2lmKGYpe3ZhciBDPWkoZi52YWx1ZSk7cmV0dXJuIEMucmVhZEludCgxKSE9PTF8fHUodGhpcy5maWxlQ29tbWVudCkhPT1DLnJlYWRJbnQoNCk/bnVsbDpsLnV0ZjhkZWNvZGUoQy5yZWFkRGF0YShmLmxlbmd0aC01KSl9cmV0dXJuIG51bGx9fSxuLmV4cG9ydHM9Z30seyIuL2NvbXByZXNzZWRPYmplY3QiOjIsIi4vY29tcHJlc3Npb25zIjozLCIuL2NyYzMyIjo0LCIuL3JlYWRlci9yZWFkZXJGb3IiOjIyLCIuL3N1cHBvcnQiOjMwLCIuL3V0ZjgiOjMxLCIuL3V0aWxzIjozMn1dLDM1OltmdW5jdGlvbih0LG4scyl7ZnVuY3Rpb24gaShDLHAsYil7dGhpcy5uYW1lPUMsdGhpcy5kaXI9Yi5kaXIsdGhpcy5kYXRlPWIuZGF0ZSx0aGlzLmNvbW1lbnQ9Yi5jb21tZW50LHRoaXMudW5peFBlcm1pc3Npb25zPWIudW5peFBlcm1pc3Npb25zLHRoaXMuZG9zUGVybWlzc2lvbnM9Yi5kb3NQZXJtaXNzaW9ucyx0aGlzLl9kYXRhPXAsdGhpcy5fZGF0YUJpbmFyeT1iLmJpbmFyeSx0aGlzLm9wdGlvbnM9e2NvbXByZXNzaW9uOmIuY29tcHJlc3Npb24sY29tcHJlc3Npb25PcHRpb25zOmIuY29tcHJlc3Npb25PcHRpb25zfX12YXIgYT10KCIuL3N0cmVhbS9TdHJlYW1IZWxwZXIiKSxvPXQoIi4vc3RyZWFtL0RhdGFXb3JrZXIiKSx1PXQoIi4vdXRmOCIpLGw9dCgiLi9jb21wcmVzc2VkT2JqZWN0IiksQT10KCIuL3N0cmVhbS9HZW5lcmljV29ya2VyIik7aS5wcm90b3R5cGU9e2ludGVybmFsU3RyZWFtOmZ1bmN0aW9uKEMpe3ZhciBwPW51bGwsYj0ic3RyaW5nIjt0cnl7aWYoIUMpdGhyb3cgbmV3IEVycm9yKCJObyBvdXRwdXQgdHlwZSBzcGVjaWZpZWQuIik7dmFyIG09KGI9Qy50b0xvd2VyQ2FzZSgpKT09PSJzdHJpbmcifHxiPT09InRleHQiO2IhPT0iYmluYXJ5c3RyaW5nIiYmYiE9PSJ0ZXh0Inx8KGI9InN0cmluZyIpLHA9dGhpcy5fZGVjb21wcmVzc1dvcmtlcigpO3ZhciBFPSF0aGlzLl9kYXRhQmluYXJ5O0UmJiFtJiYocD1wLnBpcGUobmV3IHUuVXRmOEVuY29kZVdvcmtlcikpLCFFJiZtJiYocD1wLnBpcGUobmV3IHUuVXRmOERlY29kZVdvcmtlcikpfWNhdGNoKHcpeyhwPW5ldyBBKCJlcnJvciIpKS5lcnJvcih3KX1yZXR1cm4gbmV3IGEocCxiLCIiKX0sYXN5bmM6ZnVuY3Rpb24oQyxwKXtyZXR1cm4gdGhpcy5pbnRlcm5hbFN0cmVhbShDKS5hY2N1bXVsYXRlKHApfSxub2RlU3RyZWFtOmZ1bmN0aW9uKEMscCl7cmV0dXJuIHRoaXMuaW50ZXJuYWxTdHJlYW0oQ3x8Im5vZGVidWZmZXIiKS50b05vZGVqc1N0cmVhbShwKX0sX2NvbXByZXNzV29ya2VyOmZ1bmN0aW9uKEMscCl7aWYodGhpcy5fZGF0YSBpbnN0YW5jZW9mIGwmJnRoaXMuX2RhdGEuY29tcHJlc3Npb24ubWFnaWM9PT1DLm1hZ2ljKXJldHVybiB0aGlzLl9kYXRhLmdldENvbXByZXNzZWRXb3JrZXIoKTt2YXIgYj10aGlzLl9kZWNvbXByZXNzV29ya2VyKCk7cmV0dXJuIHRoaXMuX2RhdGFCaW5hcnl8fChiPWIucGlwZShuZXcgdS5VdGY4RW5jb2RlV29ya2VyKSksbC5jcmVhdGVXb3JrZXJGcm9tKGIsQyxwKX0sX2RlY29tcHJlc3NXb3JrZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGF0YSBpbnN0YW5jZW9mIGw/dGhpcy5fZGF0YS5nZXRDb250ZW50V29ya2VyKCk6dGhpcy5fZGF0YSBpbnN0YW5jZW9mIEE/dGhpcy5fZGF0YTpuZXcgbyh0aGlzLl9kYXRhKX19O2Zvcih2YXIgZD1bImFzVGV4dCIsImFzQmluYXJ5IiwiYXNOb2RlQnVmZmVyIiwiYXNVaW50OEFycmF5IiwiYXNBcnJheUJ1ZmZlciJdLGc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlRoaXMgbWV0aG9kIGhhcyBiZWVuIHJlbW92ZWQgaW4gSlNaaXAgMy4wLCBwbGVhc2UgY2hlY2sgdGhlIHVwZ3JhZGUgZ3VpZGUuIil9LGY9MDtmPGQubGVuZ3RoO2YrKylpLnByb3RvdHlwZVtkW2ZdXT1nO24uZXhwb3J0cz1pfSx7Ii4vY29tcHJlc3NlZE9iamVjdCI6MiwiLi9zdHJlYW0vRGF0YVdvcmtlciI6MjcsIi4vc3RyZWFtL0dlbmVyaWNXb3JrZXIiOjI4LCIuL3N0cmVhbS9TdHJlYW1IZWxwZXIiOjI5LCIuL3V0ZjgiOjMxfV0sMzY6W2Z1bmN0aW9uKHQsbixzKXsoZnVuY3Rpb24oaSl7dmFyIGEsbyx1PWkuTXV0YXRpb25PYnNlcnZlcnx8aS5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO2lmKHUpe3ZhciBsPTAsQT1uZXcgdShDKSxkPWkuZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpO0Eub2JzZXJ2ZShkLHtjaGFyYWN0ZXJEYXRhOiEwfSksYT1mdW5jdGlvbigpe2QuZGF0YT1sPSsrbCUyfX1lbHNlIGlmKGkuc2V0SW1tZWRpYXRlfHxpLk1lc3NhZ2VDaGFubmVsPT09dm9pZCAwKWE9ImRvY3VtZW50ImluIGkmJiJvbnJlYWR5c3RhdGVjaGFuZ2UiaW4gaS5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKT9mdW5jdGlvbigpe3ZhciBwPWkuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7cC5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtDKCkscC5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCxwLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocCkscD1udWxsfSxpLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZChwKX06ZnVuY3Rpb24oKXtzZXRUaW1lb3V0KEMsMCl9O2Vsc2V7dmFyIGc9bmV3IGkuTWVzc2FnZUNoYW5uZWw7Zy5wb3J0MS5vbm1lc3NhZ2U9QyxhPWZ1bmN0aW9uKCl7Zy5wb3J0Mi5wb3N0TWVzc2FnZSgwKX19dmFyIGY9W107ZnVuY3Rpb24gQygpe3ZhciBwLGI7bz0hMDtmb3IodmFyIG09Zi5sZW5ndGg7bTspe2ZvcihiPWYsZj1bXSxwPS0xOysrcDxtOyliW3BdKCk7bT1mLmxlbmd0aH1vPSExfW4uZXhwb3J0cz1mdW5jdGlvbihwKXtmLnB1c2gocCkhPT0xfHxvfHxhKCl9fSkuY2FsbCh0aGlzLHR5cGVvZiBRbjwidSI/UW46dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9KX0se31dLDM3OltmdW5jdGlvbih0LG4scyl7dmFyIGk9dCgiaW1tZWRpYXRlIik7ZnVuY3Rpb24gYSgpe312YXIgbz17fSx1PVsiUkVKRUNURUQiXSxsPVsiRlVMRklMTEVEIl0sQT1bIlBFTkRJTkciXTtmdW5jdGlvbiBkKG0pe2lmKHR5cGVvZiBtIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoInJlc29sdmVyIG11c3QgYmUgYSBmdW5jdGlvbiIpO3RoaXMuc3RhdGU9QSx0aGlzLnF1ZXVlPVtdLHRoaXMub3V0Y29tZT12b2lkIDAsbSE9PWEmJnAodGhpcyxtKX1mdW5jdGlvbiBnKG0sRSx3KXt0aGlzLnByb21pc2U9bSx0eXBlb2YgRT09ImZ1bmN0aW9uIiYmKHRoaXMub25GdWxmaWxsZWQ9RSx0aGlzLmNhbGxGdWxmaWxsZWQ9dGhpcy5vdGhlckNhbGxGdWxmaWxsZWQpLHR5cGVvZiB3PT0iZnVuY3Rpb24iJiYodGhpcy5vblJlamVjdGVkPXcsdGhpcy5jYWxsUmVqZWN0ZWQ9dGhpcy5vdGhlckNhbGxSZWplY3RlZCl9ZnVuY3Rpb24gZihtLEUsdyl7aShmdW5jdGlvbigpe3ZhciBOO3RyeXtOPUUodyl9Y2F0Y2goSSl7cmV0dXJuIG8ucmVqZWN0KG0sSSl9Tj09PW0/by5yZWplY3QobSxuZXcgVHlwZUVycm9yKCJDYW5ub3QgcmVzb2x2ZSBwcm9taXNlIHdpdGggaXRzZWxmIikpOm8ucmVzb2x2ZShtLE4pfSl9ZnVuY3Rpb24gQyhtKXt2YXIgRT1tJiZtLnRoZW47aWYobSYmKHR5cGVvZiBtPT0ib2JqZWN0Inx8dHlwZW9mIG09PSJmdW5jdGlvbiIpJiZ0eXBlb2YgRT09ImZ1bmN0aW9uIilyZXR1cm4gZnVuY3Rpb24oKXtFLmFwcGx5KG0sYXJndW1lbnRzKX19ZnVuY3Rpb24gcChtLEUpe3ZhciB3PSExO2Z1bmN0aW9uIE4oTSl7d3x8KHc9ITAsby5yZWplY3QobSxNKSl9ZnVuY3Rpb24gSShNKXt3fHwodz0hMCxvLnJlc29sdmUobSxNKSl9dmFyIFI9YihmdW5jdGlvbigpe0UoSSxOKX0pO1Iuc3RhdHVzPT09ImVycm9yIiYmTihSLnZhbHVlKX1mdW5jdGlvbiBiKG0sRSl7dmFyIHc9e307dHJ5e3cudmFsdWU9bShFKSx3LnN0YXR1cz0ic3VjY2VzcyJ9Y2F0Y2goTil7dy5zdGF0dXM9ImVycm9yIix3LnZhbHVlPU59cmV0dXJuIHd9KG4uZXhwb3J0cz1kKS5wcm90b3R5cGUuZmluYWxseT1mdW5jdGlvbihtKXtpZih0eXBlb2YgbSE9ImZ1bmN0aW9uIilyZXR1cm4gdGhpczt2YXIgRT10aGlzLmNvbnN0cnVjdG9yO3JldHVybiB0aGlzLnRoZW4oZnVuY3Rpb24odyl7cmV0dXJuIEUucmVzb2x2ZShtKCkpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gd30pfSxmdW5jdGlvbih3KXtyZXR1cm4gRS5yZXNvbHZlKG0oKSkudGhlbihmdW5jdGlvbigpe3Rocm93IHd9KX0pfSxkLnByb3RvdHlwZS5jYXRjaD1mdW5jdGlvbihtKXtyZXR1cm4gdGhpcy50aGVuKG51bGwsbSl9LGQucHJvdG90eXBlLnRoZW49ZnVuY3Rpb24obSxFKXtpZih0eXBlb2YgbSE9ImZ1bmN0aW9uIiYmdGhpcy5zdGF0ZT09PWx8fHR5cGVvZiBFIT0iZnVuY3Rpb24iJiZ0aGlzLnN0YXRlPT09dSlyZXR1cm4gdGhpczt2YXIgdz1uZXcgdGhpcy5jb25zdHJ1Y3RvcihhKTtyZXR1cm4gdGhpcy5zdGF0ZSE9PUE/Zih3LHRoaXMuc3RhdGU9PT1sP206RSx0aGlzLm91dGNvbWUpOnRoaXMucXVldWUucHVzaChuZXcgZyh3LG0sRSkpLHd9LGcucHJvdG90eXBlLmNhbGxGdWxmaWxsZWQ9ZnVuY3Rpb24obSl7by5yZXNvbHZlKHRoaXMucHJvbWlzZSxtKX0sZy5wcm90b3R5cGUub3RoZXJDYWxsRnVsZmlsbGVkPWZ1bmN0aW9uKG0pe2YodGhpcy5wcm9taXNlLHRoaXMub25GdWxmaWxsZWQsbSl9LGcucHJvdG90eXBlLmNhbGxSZWplY3RlZD1mdW5jdGlvbihtKXtvLnJlamVjdCh0aGlzLnByb21pc2UsbSl9LGcucHJvdG90eXBlLm90aGVyQ2FsbFJlamVjdGVkPWZ1bmN0aW9uKG0pe2YodGhpcy5wcm9taXNlLHRoaXMub25SZWplY3RlZCxtKX0sby5yZXNvbHZlPWZ1bmN0aW9uKG0sRSl7dmFyIHc9YihDLEUpO2lmKHcuc3RhdHVzPT09ImVycm9yIilyZXR1cm4gby5yZWplY3QobSx3LnZhbHVlKTt2YXIgTj13LnZhbHVlO2lmKE4pcChtLE4pO2Vsc2V7bS5zdGF0ZT1sLG0ub3V0Y29tZT1FO2Zvcih2YXIgST0tMSxSPW0ucXVldWUubGVuZ3RoOysrSTxSOyltLnF1ZXVlW0ldLmNhbGxGdWxmaWxsZWQoRSl9cmV0dXJuIG19LG8ucmVqZWN0PWZ1bmN0aW9uKG0sRSl7bS5zdGF0ZT11LG0ub3V0Y29tZT1FO2Zvcih2YXIgdz0tMSxOPW0ucXVldWUubGVuZ3RoOysrdzxOOyltLnF1ZXVlW3ddLmNhbGxSZWplY3RlZChFKTtyZXR1cm4gbX0sZC5yZXNvbHZlPWZ1bmN0aW9uKG0pe3JldHVybiBtIGluc3RhbmNlb2YgdGhpcz9tOm8ucmVzb2x2ZShuZXcgdGhpcyhhKSxtKX0sZC5yZWplY3Q9ZnVuY3Rpb24obSl7dmFyIEU9bmV3IHRoaXMoYSk7cmV0dXJuIG8ucmVqZWN0KEUsbSl9LGQuYWxsPWZ1bmN0aW9uKG0pe3ZhciBFPXRoaXM7aWYoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG0pIT09IltvYmplY3QgQXJyYXldIilyZXR1cm4gdGhpcy5yZWplY3QobmV3IFR5cGVFcnJvcigibXVzdCBiZSBhbiBhcnJheSIpKTt2YXIgdz1tLmxlbmd0aCxOPSExO2lmKCF3KXJldHVybiB0aGlzLnJlc29sdmUoW10pO2Zvcih2YXIgST1uZXcgQXJyYXkodyksUj0wLE09LTEsVz1uZXcgdGhpcyhhKTsrK008dzspTyhtW01dLE0pO3JldHVybiBXO2Z1bmN0aW9uIE8oVixYKXtFLnJlc29sdmUoVikudGhlbihmdW5jdGlvbih2KXtJW1hdPXYsKytSIT09d3x8Tnx8KE49ITAsby5yZXNvbHZlKFcsSSkpfSxmdW5jdGlvbih2KXtOfHwoTj0hMCxvLnJlamVjdChXLHYpKX0pfX0sZC5yYWNlPWZ1bmN0aW9uKG0pe3ZhciBFPXRoaXM7aWYoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG0pIT09IltvYmplY3QgQXJyYXldIilyZXR1cm4gdGhpcy5yZWplY3QobmV3IFR5cGVFcnJvcigibXVzdCBiZSBhbiBhcnJheSIpKTt2YXIgdz1tLmxlbmd0aCxOPSExO2lmKCF3KXJldHVybiB0aGlzLnJlc29sdmUoW10pO2Zvcih2YXIgST0tMSxSPW5ldyB0aGlzKGEpOysrSTx3OylNPW1bSV0sRS5yZXNvbHZlKE0pLnRoZW4oZnVuY3Rpb24oVyl7Tnx8KE49ITAsby5yZXNvbHZlKFIsVykpfSxmdW5jdGlvbihXKXtOfHwoTj0hMCxvLnJlamVjdChSLFcpKX0pO3ZhciBNO3JldHVybiBSfX0se2ltbWVkaWF0ZTozNn1dLDM4OltmdW5jdGlvbih0LG4scyl7dmFyIGk9e307KDAsdCgiLi9saWIvdXRpbHMvY29tbW9uIikuYXNzaWduKShpLHQoIi4vbGliL2RlZmxhdGUiKSx0KCIuL2xpYi9pbmZsYXRlIiksdCgiLi9saWIvemxpYi9jb25zdGFudHMiKSksbi5leHBvcnRzPWl9LHsiLi9saWIvZGVmbGF0ZSI6MzksIi4vbGliL2luZmxhdGUiOjQwLCIuL2xpYi91dGlscy9jb21tb24iOjQxLCIuL2xpYi96bGliL2NvbnN0YW50cyI6NDR9XSwzOTpbZnVuY3Rpb24odCxuLHMpe3ZhciBpPXQoIi4vemxpYi9kZWZsYXRlIiksYT10KCIuL3V0aWxzL2NvbW1vbiIpLG89dCgiLi91dGlscy9zdHJpbmdzIiksdT10KCIuL3psaWIvbWVzc2FnZXMiKSxsPXQoIi4vemxpYi96c3RyZWFtIiksQT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGQ9MCxnPS0xLGY9MCxDPTg7ZnVuY3Rpb24gcChtKXtpZighKHRoaXMgaW5zdGFuY2VvZiBwKSlyZXR1cm4gbmV3IHAobSk7dGhpcy5vcHRpb25zPWEuYXNzaWduKHtsZXZlbDpnLG1ldGhvZDpDLGNodW5rU2l6ZToxNjM4NCx3aW5kb3dCaXRzOjE1LG1lbUxldmVsOjgsc3RyYXRlZ3k6Zix0bzoiIn0sbXx8e30pO3ZhciBFPXRoaXMub3B0aW9ucztFLnJhdyYmMDxFLndpbmRvd0JpdHM/RS53aW5kb3dCaXRzPS1FLndpbmRvd0JpdHM6RS5nemlwJiYwPEUud2luZG93Qml0cyYmRS53aW5kb3dCaXRzPDE2JiYoRS53aW5kb3dCaXRzKz0xNiksdGhpcy5lcnI9MCx0aGlzLm1zZz0iIix0aGlzLmVuZGVkPSExLHRoaXMuY2h1bmtzPVtdLHRoaXMuc3RybT1uZXcgbCx0aGlzLnN0cm0uYXZhaWxfb3V0PTA7dmFyIHc9aS5kZWZsYXRlSW5pdDIodGhpcy5zdHJtLEUubGV2ZWwsRS5tZXRob2QsRS53aW5kb3dCaXRzLEUubWVtTGV2ZWwsRS5zdHJhdGVneSk7aWYodyE9PWQpdGhyb3cgbmV3IEVycm9yKHVbd10pO2lmKEUuaGVhZGVyJiZpLmRlZmxhdGVTZXRIZWFkZXIodGhpcy5zdHJtLEUuaGVhZGVyKSxFLmRpY3Rpb25hcnkpe3ZhciBOO2lmKE49dHlwZW9mIEUuZGljdGlvbmFyeT09InN0cmluZyI/by5zdHJpbmcyYnVmKEUuZGljdGlvbmFyeSk6QS5jYWxsKEUuZGljdGlvbmFyeSk9PT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iP25ldyBVaW50OEFycmF5KEUuZGljdGlvbmFyeSk6RS5kaWN0aW9uYXJ5LCh3PWkuZGVmbGF0ZVNldERpY3Rpb25hcnkodGhpcy5zdHJtLE4pKSE9PWQpdGhyb3cgbmV3IEVycm9yKHVbd10pO3RoaXMuX2RpY3Rfc2V0PSEwfX1mdW5jdGlvbiBiKG0sRSl7dmFyIHc9bmV3IHAoRSk7aWYody5wdXNoKG0sITApLHcuZXJyKXRocm93IHcubXNnfHx1W3cuZXJyXTtyZXR1cm4gdy5yZXN1bHR9cC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihtLEUpe3ZhciB3LE4sST10aGlzLnN0cm0sUj10aGlzLm9wdGlvbnMuY2h1bmtTaXplO2lmKHRoaXMuZW5kZWQpcmV0dXJuITE7Tj1FPT09fn5FP0U6RT09PSEwPzQ6MCx0eXBlb2YgbT09InN0cmluZyI/SS5pbnB1dD1vLnN0cmluZzJidWYobSk6QS5jYWxsKG0pPT09IltvYmplY3QgQXJyYXlCdWZmZXJdIj9JLmlucHV0PW5ldyBVaW50OEFycmF5KG0pOkkuaW5wdXQ9bSxJLm5leHRfaW49MCxJLmF2YWlsX2luPUkuaW5wdXQubGVuZ3RoO2Rve2lmKEkuYXZhaWxfb3V0PT09MCYmKEkub3V0cHV0PW5ldyBhLkJ1ZjgoUiksSS5uZXh0X291dD0wLEkuYXZhaWxfb3V0PVIpLCh3PWkuZGVmbGF0ZShJLE4pKSE9PTEmJnchPT1kKXJldHVybiB0aGlzLm9uRW5kKHcpLCEodGhpcy5lbmRlZD0hMCk7SS5hdmFpbF9vdXQhPT0wJiYoSS5hdmFpbF9pbiE9PTB8fE4hPT00JiZOIT09Mil8fCh0aGlzLm9wdGlvbnMudG89PT0ic3RyaW5nIj90aGlzLm9uRGF0YShvLmJ1ZjJiaW5zdHJpbmcoYS5zaHJpbmtCdWYoSS5vdXRwdXQsSS5uZXh0X291dCkpKTp0aGlzLm9uRGF0YShhLnNocmlua0J1ZihJLm91dHB1dCxJLm5leHRfb3V0KSkpfXdoaWxlKCgwPEkuYXZhaWxfaW58fEkuYXZhaWxfb3V0PT09MCkmJnchPT0xKTtyZXR1cm4gTj09PTQ/KHc9aS5kZWZsYXRlRW5kKHRoaXMuc3RybSksdGhpcy5vbkVuZCh3KSx0aGlzLmVuZGVkPSEwLHc9PT1kKTpOIT09Mnx8KHRoaXMub25FbmQoZCksIShJLmF2YWlsX291dD0wKSl9LHAucHJvdG90eXBlLm9uRGF0YT1mdW5jdGlvbihtKXt0aGlzLmNodW5rcy5wdXNoKG0pfSxwLnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbihtKXttPT09ZCYmKHRoaXMub3B0aW9ucy50bz09PSJzdHJpbmciP3RoaXMucmVzdWx0PXRoaXMuY2h1bmtzLmpvaW4oIiIpOnRoaXMucmVzdWx0PWEuZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcykpLHRoaXMuY2h1bmtzPVtdLHRoaXMuZXJyPW0sdGhpcy5tc2c9dGhpcy5zdHJtLm1zZ30scy5EZWZsYXRlPXAscy5kZWZsYXRlPWIscy5kZWZsYXRlUmF3PWZ1bmN0aW9uKG0sRSl7cmV0dXJuKEU9RXx8e30pLnJhdz0hMCxiKG0sRSl9LHMuZ3ppcD1mdW5jdGlvbihtLEUpe3JldHVybihFPUV8fHt9KS5nemlwPSEwLGIobSxFKX19LHsiLi91dGlscy9jb21tb24iOjQxLCIuL3V0aWxzL3N0cmluZ3MiOjQyLCIuL3psaWIvZGVmbGF0ZSI6NDYsIi4vemxpYi9tZXNzYWdlcyI6NTEsIi4vemxpYi96c3RyZWFtIjo1M31dLDQwOltmdW5jdGlvbih0LG4scyl7dmFyIGk9dCgiLi96bGliL2luZmxhdGUiKSxhPXQoIi4vdXRpbHMvY29tbW9uIiksbz10KCIuL3V0aWxzL3N0cmluZ3MiKSx1PXQoIi4vemxpYi9jb25zdGFudHMiKSxsPXQoIi4vemxpYi9tZXNzYWdlcyIpLEE9dCgiLi96bGliL3pzdHJlYW0iKSxkPXQoIi4vemxpYi9nemhlYWRlciIpLGc9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztmdW5jdGlvbiBmKHApe2lmKCEodGhpcyBpbnN0YW5jZW9mIGYpKXJldHVybiBuZXcgZihwKTt0aGlzLm9wdGlvbnM9YS5hc3NpZ24oe2NodW5rU2l6ZToxNjM4NCx3aW5kb3dCaXRzOjAsdG86IiJ9LHB8fHt9KTt2YXIgYj10aGlzLm9wdGlvbnM7Yi5yYXcmJjA8PWIud2luZG93Qml0cyYmYi53aW5kb3dCaXRzPDE2JiYoYi53aW5kb3dCaXRzPS1iLndpbmRvd0JpdHMsYi53aW5kb3dCaXRzPT09MCYmKGIud2luZG93Qml0cz0tMTUpKSwhKDA8PWIud2luZG93Qml0cyYmYi53aW5kb3dCaXRzPDE2KXx8cCYmcC53aW5kb3dCaXRzfHwoYi53aW5kb3dCaXRzKz0zMiksMTU8Yi53aW5kb3dCaXRzJiZiLndpbmRvd0JpdHM8NDgmJiEoMTUmYi53aW5kb3dCaXRzKSYmKGIud2luZG93Qml0c3w9MTUpLHRoaXMuZXJyPTAsdGhpcy5tc2c9IiIsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IEEsdGhpcy5zdHJtLmF2YWlsX291dD0wO3ZhciBtPWkuaW5mbGF0ZUluaXQyKHRoaXMuc3RybSxiLndpbmRvd0JpdHMpO2lmKG0hPT11LlpfT0spdGhyb3cgbmV3IEVycm9yKGxbbV0pO3RoaXMuaGVhZGVyPW5ldyBkLGkuaW5mbGF0ZUdldEhlYWRlcih0aGlzLnN0cm0sdGhpcy5oZWFkZXIpfWZ1bmN0aW9uIEMocCxiKXt2YXIgbT1uZXcgZihiKTtpZihtLnB1c2gocCwhMCksbS5lcnIpdGhyb3cgbS5tc2d8fGxbbS5lcnJdO3JldHVybiBtLnJlc3VsdH1mLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKHAsYil7dmFyIG0sRSx3LE4sSSxSLE09dGhpcy5zdHJtLFc9dGhpcy5vcHRpb25zLmNodW5rU2l6ZSxPPXRoaXMub3B0aW9ucy5kaWN0aW9uYXJ5LFY9ITE7aWYodGhpcy5lbmRlZClyZXR1cm4hMTtFPWI9PT1+fmI/YjpiPT09ITA/dS5aX0ZJTklTSDp1LlpfTk9fRkxVU0gsdHlwZW9mIHA9PSJzdHJpbmciP00uaW5wdXQ9by5iaW5zdHJpbmcyYnVmKHApOmcuY2FsbChwKT09PSJbb2JqZWN0IEFycmF5QnVmZmVyXSI/TS5pbnB1dD1uZXcgVWludDhBcnJheShwKTpNLmlucHV0PXAsTS5uZXh0X2luPTAsTS5hdmFpbF9pbj1NLmlucHV0Lmxlbmd0aDtkb3tpZihNLmF2YWlsX291dD09PTAmJihNLm91dHB1dD1uZXcgYS5CdWY4KFcpLE0ubmV4dF9vdXQ9MCxNLmF2YWlsX291dD1XKSwobT1pLmluZmxhdGUoTSx1LlpfTk9fRkxVU0gpKT09PXUuWl9ORUVEX0RJQ1QmJk8mJihSPXR5cGVvZiBPPT0ic3RyaW5nIj9vLnN0cmluZzJidWYoTyk6Zy5jYWxsKE8pPT09IltvYmplY3QgQXJyYXlCdWZmZXJdIj9uZXcgVWludDhBcnJheShPKTpPLG09aS5pbmZsYXRlU2V0RGljdGlvbmFyeSh0aGlzLnN0cm0sUikpLG09PT11LlpfQlVGX0VSUk9SJiZWPT09ITAmJihtPXUuWl9PSyxWPSExKSxtIT09dS5aX1NUUkVBTV9FTkQmJm0hPT11LlpfT0spcmV0dXJuIHRoaXMub25FbmQobSksISh0aGlzLmVuZGVkPSEwKTtNLm5leHRfb3V0JiYoTS5hdmFpbF9vdXQhPT0wJiZtIT09dS5aX1NUUkVBTV9FTkQmJihNLmF2YWlsX2luIT09MHx8RSE9PXUuWl9GSU5JU0gmJkUhPT11LlpfU1lOQ19GTFVTSCl8fCh0aGlzLm9wdGlvbnMudG89PT0ic3RyaW5nIj8odz1vLnV0Zjhib3JkZXIoTS5vdXRwdXQsTS5uZXh0X291dCksTj1NLm5leHRfb3V0LXcsST1vLmJ1ZjJzdHJpbmcoTS5vdXRwdXQsdyksTS5uZXh0X291dD1OLE0uYXZhaWxfb3V0PVctTixOJiZhLmFycmF5U2V0KE0ub3V0cHV0LE0ub3V0cHV0LHcsTiwwKSx0aGlzLm9uRGF0YShJKSk6dGhpcy5vbkRhdGEoYS5zaHJpbmtCdWYoTS5vdXRwdXQsTS5uZXh0X291dCkpKSksTS5hdmFpbF9pbj09PTAmJk0uYXZhaWxfb3V0PT09MCYmKFY9ITApfXdoaWxlKCgwPE0uYXZhaWxfaW58fE0uYXZhaWxfb3V0PT09MCkmJm0hPT11LlpfU1RSRUFNX0VORCk7cmV0dXJuIG09PT11LlpfU1RSRUFNX0VORCYmKEU9dS5aX0ZJTklTSCksRT09PXUuWl9GSU5JU0g/KG09aS5pbmZsYXRlRW5kKHRoaXMuc3RybSksdGhpcy5vbkVuZChtKSx0aGlzLmVuZGVkPSEwLG09PT11LlpfT0spOkUhPT11LlpfU1lOQ19GTFVTSHx8KHRoaXMub25FbmQodS5aX09LKSwhKE0uYXZhaWxfb3V0PTApKX0sZi5wcm90b3R5cGUub25EYXRhPWZ1bmN0aW9uKHApe3RoaXMuY2h1bmtzLnB1c2gocCl9LGYucHJvdG90eXBlLm9uRW5kPWZ1bmN0aW9uKHApe3A9PT11LlpfT0smJih0aGlzLm9wdGlvbnMudG89PT0ic3RyaW5nIj90aGlzLnJlc3VsdD10aGlzLmNodW5rcy5qb2luKCIiKTp0aGlzLnJlc3VsdD1hLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpKSx0aGlzLmNodW5rcz1bXSx0aGlzLmVycj1wLHRoaXMubXNnPXRoaXMuc3RybS5tc2d9LHMuSW5mbGF0ZT1mLHMuaW5mbGF0ZT1DLHMuaW5mbGF0ZVJhdz1mdW5jdGlvbihwLGIpe3JldHVybihiPWJ8fHt9KS5yYXc9ITAsQyhwLGIpfSxzLnVuZ3ppcD1DfSx7Ii4vdXRpbHMvY29tbW9uIjo0MSwiLi91dGlscy9zdHJpbmdzIjo0MiwiLi96bGliL2NvbnN0YW50cyI6NDQsIi4vemxpYi9nemhlYWRlciI6NDcsIi4vemxpYi9pbmZsYXRlIjo0OSwiLi96bGliL21lc3NhZ2VzIjo1MSwiLi96bGliL3pzdHJlYW0iOjUzfV0sNDE6W2Z1bmN0aW9uKHQsbixzKXt2YXIgaT10eXBlb2YgVWludDhBcnJheTwidSImJnR5cGVvZiBVaW50MTZBcnJheTwidSImJnR5cGVvZiBJbnQzMkFycmF5PCJ1IjtzLmFzc2lnbj1mdW5jdGlvbih1KXtmb3IodmFyIGw9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO2wubGVuZ3RoOyl7dmFyIEE9bC5zaGlmdCgpO2lmKEEpe2lmKHR5cGVvZiBBIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKEErIm11c3QgYmUgbm9uLW9iamVjdCIpO2Zvcih2YXIgZCBpbiBBKUEuaGFzT3duUHJvcGVydHkoZCkmJih1W2RdPUFbZF0pfX1yZXR1cm4gdX0scy5zaHJpbmtCdWY9ZnVuY3Rpb24odSxsKXtyZXR1cm4gdS5sZW5ndGg9PT1sP3U6dS5zdWJhcnJheT91LnN1YmFycmF5KDAsbCk6KHUubGVuZ3RoPWwsdSl9O3ZhciBhPXthcnJheVNldDpmdW5jdGlvbih1LGwsQSxkLGcpe2lmKGwuc3ViYXJyYXkmJnUuc3ViYXJyYXkpdS5zZXQobC5zdWJhcnJheShBLEErZCksZyk7ZWxzZSBmb3IodmFyIGY9MDtmPGQ7ZisrKXVbZytmXT1sW0ErZl19LGZsYXR0ZW5DaHVua3M6ZnVuY3Rpb24odSl7dmFyIGwsQSxkLGcsZixDO2ZvcihsPWQ9MCxBPXUubGVuZ3RoO2w8QTtsKyspZCs9dVtsXS5sZW5ndGg7Zm9yKEM9bmV3IFVpbnQ4QXJyYXkoZCksbD1nPTAsQT11Lmxlbmd0aDtsPEE7bCsrKWY9dVtsXSxDLnNldChmLGcpLGcrPWYubGVuZ3RoO3JldHVybiBDfX0sbz17YXJyYXlTZXQ6ZnVuY3Rpb24odSxsLEEsZCxnKXtmb3IodmFyIGY9MDtmPGQ7ZisrKXVbZytmXT1sW0ErZl19LGZsYXR0ZW5DaHVua3M6ZnVuY3Rpb24odSl7cmV0dXJuW10uY29uY2F0LmFwcGx5KFtdLHUpfX07cy5zZXRUeXBlZD1mdW5jdGlvbih1KXt1PyhzLkJ1Zjg9VWludDhBcnJheSxzLkJ1ZjE2PVVpbnQxNkFycmF5LHMuQnVmMzI9SW50MzJBcnJheSxzLmFzc2lnbihzLGEpKToocy5CdWY4PUFycmF5LHMuQnVmMTY9QXJyYXkscy5CdWYzMj1BcnJheSxzLmFzc2lnbihzLG8pKX0scy5zZXRUeXBlZChpKX0se31dLDQyOltmdW5jdGlvbih0LG4scyl7dmFyIGk9dCgiLi9jb21tb24iKSxhPSEwLG89ITA7dHJ5e1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxbMF0pfWNhdGNoe2E9ITF9dHJ5e1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxuZXcgVWludDhBcnJheSgxKSl9Y2F0Y2h7bz0hMX1mb3IodmFyIHU9bmV3IGkuQnVmOCgyNTYpLGw9MDtsPDI1NjtsKyspdVtsXT0yNTI8PWw/NjoyNDg8PWw/NToyNDA8PWw/NDoyMjQ8PWw/MzoxOTI8PWw/MjoxO2Z1bmN0aW9uIEEoZCxnKXtpZihnPDY1NTM3JiYoZC5zdWJhcnJheSYmb3x8IWQuc3ViYXJyYXkmJmEpKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsaS5zaHJpbmtCdWYoZCxnKSk7Zm9yKHZhciBmPSIiLEM9MDtDPGc7QysrKWYrPVN0cmluZy5mcm9tQ2hhckNvZGUoZFtDXSk7cmV0dXJuIGZ9dVsyNTRdPXVbMjU0XT0xLHMuc3RyaW5nMmJ1Zj1mdW5jdGlvbihkKXt2YXIgZyxmLEMscCxiLG09ZC5sZW5ndGgsRT0wO2ZvcihwPTA7cDxtO3ArKykoNjQ1MTImKGY9ZC5jaGFyQ29kZUF0KHApKSk9PTU1Mjk2JiZwKzE8bSYmKDY0NTEyJihDPWQuY2hhckNvZGVBdChwKzEpKSk9PTU2MzIwJiYoZj02NTUzNisoZi01NTI5Njw8MTApKyhDLTU2MzIwKSxwKyspLEUrPWY8MTI4PzE6ZjwyMDQ4PzI6Zjw2NTUzNj8zOjQ7Zm9yKGc9bmV3IGkuQnVmOChFKSxwPWI9MDtiPEU7cCsrKSg2NDUxMiYoZj1kLmNoYXJDb2RlQXQocCkpKT09NTUyOTYmJnArMTxtJiYoNjQ1MTImKEM9ZC5jaGFyQ29kZUF0KHArMSkpKT09NTYzMjAmJihmPTY1NTM2KyhmLTU1Mjk2PDwxMCkrKEMtNTYzMjApLHArKyksZjwxMjg/Z1tiKytdPWY6KGY8MjA0OD9nW2IrK109MTkyfGY+Pj42OihmPDY1NTM2P2dbYisrXT0yMjR8Zj4+PjEyOihnW2IrK109MjQwfGY+Pj4xOCxnW2IrK109MTI4fGY+Pj4xMiY2MyksZ1tiKytdPTEyOHxmPj4+NiY2MyksZ1tiKytdPTEyOHw2MyZmKTtyZXR1cm4gZ30scy5idWYyYmluc3RyaW5nPWZ1bmN0aW9uKGQpe3JldHVybiBBKGQsZC5sZW5ndGgpfSxzLmJpbnN0cmluZzJidWY9ZnVuY3Rpb24oZCl7Zm9yKHZhciBnPW5ldyBpLkJ1ZjgoZC5sZW5ndGgpLGY9MCxDPWcubGVuZ3RoO2Y8QztmKyspZ1tmXT1kLmNoYXJDb2RlQXQoZik7cmV0dXJuIGd9LHMuYnVmMnN0cmluZz1mdW5jdGlvbihkLGcpe3ZhciBmLEMscCxiLG09Z3x8ZC5sZW5ndGgsRT1uZXcgQXJyYXkoMiptKTtmb3IoZj1DPTA7ZjxtOylpZigocD1kW2YrK10pPDEyOClFW0MrK109cDtlbHNlIGlmKDQ8KGI9dVtwXSkpRVtDKytdPTY1NTMzLGYrPWItMTtlbHNle2ZvcihwJj1iPT09Mj8zMTpiPT09Mz8xNTo3OzE8YiYmZjxtOylwPXA8PDZ8NjMmZFtmKytdLGItLTsxPGI/RVtDKytdPTY1NTMzOnA8NjU1MzY/RVtDKytdPXA6KHAtPTY1NTM2LEVbQysrXT01NTI5NnxwPj4xMCYxMDIzLEVbQysrXT01NjMyMHwxMDIzJnApfXJldHVybiBBKEUsQyl9LHMudXRmOGJvcmRlcj1mdW5jdGlvbihkLGcpe3ZhciBmO2ZvcigoZz1nfHxkLmxlbmd0aCk+ZC5sZW5ndGgmJihnPWQubGVuZ3RoKSxmPWctMTswPD1mJiYoMTkyJmRbZl0pPT0xMjg7KWYtLTtyZXR1cm4gZjwwfHxmPT09MD9nOmYrdVtkW2ZdXT5nP2Y6Z319LHsiLi9jb21tb24iOjQxfV0sNDM6W2Z1bmN0aW9uKHQsbixzKXtuLmV4cG9ydHM9ZnVuY3Rpb24oaSxhLG8sdSl7Zm9yKHZhciBsPTY1NTM1Jml8MCxBPWk+Pj4xNiY2NTUzNXwwLGQ9MDtvIT09MDspe2ZvcihvLT1kPTJlMzxvPzJlMzpvO0E9QSsobD1sK2FbdSsrXXwwKXwwLC0tZDspO2wlPTY1NTIxLEElPTY1NTIxfXJldHVybiBsfEE8PDE2fDB9fSx7fV0sNDQ6W2Z1bmN0aW9uKHQsbixzKXtuLmV4cG9ydHM9e1pfTk9fRkxVU0g6MCxaX1BBUlRJQUxfRkxVU0g6MSxaX1NZTkNfRkxVU0g6MixaX0ZVTExfRkxVU0g6MyxaX0ZJTklTSDo0LFpfQkxPQ0s6NSxaX1RSRUVTOjYsWl9PSzowLFpfU1RSRUFNX0VORDoxLFpfTkVFRF9ESUNUOjIsWl9FUlJOTzotMSxaX1NUUkVBTV9FUlJPUjotMixaX0RBVEFfRVJST1I6LTMsWl9CVUZfRVJST1I6LTUsWl9OT19DT01QUkVTU0lPTjowLFpfQkVTVF9TUEVFRDoxLFpfQkVTVF9DT01QUkVTU0lPTjo5LFpfREVGQVVMVF9DT01QUkVTU0lPTjotMSxaX0ZJTFRFUkVEOjEsWl9IVUZGTUFOX09OTFk6MixaX1JMRTozLFpfRklYRUQ6NCxaX0RFRkFVTFRfU1RSQVRFR1k6MCxaX0JJTkFSWTowLFpfVEVYVDoxLFpfVU5LTk9XTjoyLFpfREVGTEFURUQ6OH19LHt9XSw0NTpbZnVuY3Rpb24odCxuLHMpe3ZhciBpPWZ1bmN0aW9uKCl7Zm9yKHZhciBhLG89W10sdT0wO3U8MjU2O3UrKyl7YT11O2Zvcih2YXIgbD0wO2w8ODtsKyspYT0xJmE/Mzk4ODI5MjM4NF5hPj4+MTphPj4+MTtvW3VdPWF9cmV0dXJuIG99KCk7bi5leHBvcnRzPWZ1bmN0aW9uKGEsbyx1LGwpe3ZhciBBPWksZD1sK3U7YV49LTE7Zm9yKHZhciBnPWw7ZzxkO2crKylhPWE+Pj44XkFbMjU1JihhXm9bZ10pXTtyZXR1cm4tMV5hfX0se31dLDQ2OltmdW5jdGlvbih0LG4scyl7dmFyIGksYT10KCIuLi91dGlscy9jb21tb24iKSxvPXQoIi4vdHJlZXMiKSx1PXQoIi4vYWRsZXIzMiIpLGw9dCgiLi9jcmMzMiIpLEE9dCgiLi9tZXNzYWdlcyIpLGQ9MCxnPTQsZj0wLEM9LTIscD0tMSxiPTQsbT0yLEU9OCx3PTksTj0yODYsST0zMCxSPTE5LE09MipOKzEsVz0xNSxPPTMsVj0yNTgsWD1WK08rMSx2PTQyLFA9MTEzLGg9MSxHPTIsaGU9MyxLPTQ7ZnVuY3Rpb24gQWUoYyxIKXtyZXR1cm4gYy5tc2c9QVtIXSxIfWZ1bmN0aW9uIFUoYyl7cmV0dXJuKGM8PDEpLSg0PGM/OTowKX1mdW5jdGlvbiBzZShjKXtmb3IodmFyIEg9Yy5sZW5ndGg7MDw9LS1IOyljW0hdPTB9ZnVuY3Rpb24gRihjKXt2YXIgSD1jLnN0YXRlLEw9SC5wZW5kaW5nO0w+Yy5hdmFpbF9vdXQmJihMPWMuYXZhaWxfb3V0KSxMIT09MCYmKGEuYXJyYXlTZXQoYy5vdXRwdXQsSC5wZW5kaW5nX2J1ZixILnBlbmRpbmdfb3V0LEwsYy5uZXh0X291dCksYy5uZXh0X291dCs9TCxILnBlbmRpbmdfb3V0Kz1MLGMudG90YWxfb3V0Kz1MLGMuYXZhaWxfb3V0LT1MLEgucGVuZGluZy09TCxILnBlbmRpbmc9PT0wJiYoSC5wZW5kaW5nX291dD0wKSl9ZnVuY3Rpb24gVChjLEgpe28uX3RyX2ZsdXNoX2Jsb2NrKGMsMDw9Yy5ibG9ja19zdGFydD9jLmJsb2NrX3N0YXJ0Oi0xLGMuc3Ryc3RhcnQtYy5ibG9ja19zdGFydCxIKSxjLmJsb2NrX3N0YXJ0PWMuc3Ryc3RhcnQsRihjLnN0cm0pfWZ1bmN0aW9uIHVlKGMsSCl7Yy5wZW5kaW5nX2J1ZltjLnBlbmRpbmcrK109SH1mdW5jdGlvbiB0ZShjLEgpe2MucGVuZGluZ19idWZbYy5wZW5kaW5nKytdPUg+Pj44JjI1NSxjLnBlbmRpbmdfYnVmW2MucGVuZGluZysrXT0yNTUmSH1mdW5jdGlvbiBqKGMsSCl7dmFyIEwseSxTPWMubWF4X2NoYWluX2xlbmd0aCxrPWMuc3Ryc3RhcnQsUT1jLnByZXZfbGVuZ3RoLFk9Yy5uaWNlX21hdGNoLHg9Yy5zdHJzdGFydD5jLndfc2l6ZS1YP2Muc3Ryc3RhcnQtKGMud19zaXplLVgpOjAsSj1jLndpbmRvdyxyZT1jLndfbWFzayxxPWMucHJldixvZT1jLnN0cnN0YXJ0K1YseGU9SltrK1EtMV0sRWU9SltrK1FdO2MucHJldl9sZW5ndGg+PWMuZ29vZF9tYXRjaCYmKFM+Pj0yKSxZPmMubG9va2FoZWFkJiYoWT1jLmxvb2thaGVhZCk7ZG8gaWYoSlsoTD1IKStRXT09PUVlJiZKW0wrUS0xXT09PXhlJiZKW0xdPT09SltrXSYmSlsrK0xdPT09SltrKzFdKXtrKz0yLEwrKztkbzt3aGlsZShKWysra109PT1KWysrTF0mJkpbKytrXT09PUpbKytMXSYmSlsrK2tdPT09SlsrK0xdJiZKWysra109PT1KWysrTF0mJkpbKytrXT09PUpbKytMXSYmSlsrK2tdPT09SlsrK0xdJiZKWysra109PT1KWysrTF0mJkpbKytrXT09PUpbKytMXSYmazxvZSk7aWYoeT1WLShvZS1rKSxrPW9lLVYsUTx5KXtpZihjLm1hdGNoX3N0YXJ0PUgsWTw9KFE9eSkpYnJlYWs7eGU9SltrK1EtMV0sRWU9SltrK1FdfX13aGlsZSgoSD1xW0gmcmVdKT54JiYtLVMhPTApO3JldHVybiBRPD1jLmxvb2thaGVhZD9ROmMubG9va2FoZWFkfWZ1bmN0aW9uIExlKGMpe3ZhciBILEwseSxTLGssUSxZLHgsSixyZSxxPWMud19zaXplO2Rve2lmKFM9Yy53aW5kb3dfc2l6ZS1jLmxvb2thaGVhZC1jLnN0cnN0YXJ0LGMuc3Ryc3RhcnQ+PXErKHEtWCkpe2ZvcihhLmFycmF5U2V0KGMud2luZG93LGMud2luZG93LHEscSwwKSxjLm1hdGNoX3N0YXJ0LT1xLGMuc3Ryc3RhcnQtPXEsYy5ibG9ja19zdGFydC09cSxIPUw9Yy5oYXNoX3NpemU7eT1jLmhlYWRbLS1IXSxjLmhlYWRbSF09cTw9eT95LXE6MCwtLUw7KTtmb3IoSD1MPXE7eT1jLnByZXZbLS1IXSxjLnByZXZbSF09cTw9eT95LXE6MCwtLUw7KTtTKz1xfWlmKGMuc3RybS5hdmFpbF9pbj09PTApYnJlYWs7aWYoUT1jLnN0cm0sWT1jLndpbmRvdyx4PWMuc3Ryc3RhcnQrYy5sb29rYWhlYWQsSj1TLHJlPXZvaWQgMCxyZT1RLmF2YWlsX2luLEo8cmUmJihyZT1KKSxMPXJlPT09MD8wOihRLmF2YWlsX2luLT1yZSxhLmFycmF5U2V0KFksUS5pbnB1dCxRLm5leHRfaW4scmUseCksUS5zdGF0ZS53cmFwPT09MT9RLmFkbGVyPXUoUS5hZGxlcixZLHJlLHgpOlEuc3RhdGUud3JhcD09PTImJihRLmFkbGVyPWwoUS5hZGxlcixZLHJlLHgpKSxRLm5leHRfaW4rPXJlLFEudG90YWxfaW4rPXJlLHJlKSxjLmxvb2thaGVhZCs9TCxjLmxvb2thaGVhZCtjLmluc2VydD49Tylmb3Ioaz1jLnN0cnN0YXJ0LWMuaW5zZXJ0LGMuaW5zX2g9Yy53aW5kb3dba10sYy5pbnNfaD0oYy5pbnNfaDw8Yy5oYXNoX3NoaWZ0XmMud2luZG93W2srMV0pJmMuaGFzaF9tYXNrO2MuaW5zZXJ0JiYoYy5pbnNfaD0oYy5pbnNfaDw8Yy5oYXNoX3NoaWZ0XmMud2luZG93W2srTy0xXSkmYy5oYXNoX21hc2ssYy5wcmV2W2smYy53X21hc2tdPWMuaGVhZFtjLmluc19oXSxjLmhlYWRbYy5pbnNfaF09ayxrKyssYy5pbnNlcnQtLSwhKGMubG9va2FoZWFkK2MuaW5zZXJ0PE8pKTspO313aGlsZShjLmxvb2thaGVhZDxYJiZjLnN0cm0uYXZhaWxfaW4hPT0wKX1mdW5jdGlvbiAkZShjLEgpe2Zvcih2YXIgTCx5Ozspe2lmKGMubG9va2FoZWFkPFgpe2lmKExlKGMpLGMubG9va2FoZWFkPFgmJkg9PT1kKXJldHVybiBoO2lmKGMubG9va2FoZWFkPT09MClicmVha31pZihMPTAsYy5sb29rYWhlYWQ+PU8mJihjLmluc19oPShjLmluc19oPDxjLmhhc2hfc2hpZnReYy53aW5kb3dbYy5zdHJzdGFydCtPLTFdKSZjLmhhc2hfbWFzayxMPWMucHJldltjLnN0cnN0YXJ0JmMud19tYXNrXT1jLmhlYWRbYy5pbnNfaF0sYy5oZWFkW2MuaW5zX2hdPWMuc3Ryc3RhcnQpLEwhPT0wJiZjLnN0cnN0YXJ0LUw8PWMud19zaXplLVgmJihjLm1hdGNoX2xlbmd0aD1qKGMsTCkpLGMubWF0Y2hfbGVuZ3RoPj1PKWlmKHk9by5fdHJfdGFsbHkoYyxjLnN0cnN0YXJ0LWMubWF0Y2hfc3RhcnQsYy5tYXRjaF9sZW5ndGgtTyksYy5sb29rYWhlYWQtPWMubWF0Y2hfbGVuZ3RoLGMubWF0Y2hfbGVuZ3RoPD1jLm1heF9sYXp5X21hdGNoJiZjLmxvb2thaGVhZD49Tyl7Zm9yKGMubWF0Y2hfbGVuZ3RoLS07Yy5zdHJzdGFydCsrLGMuaW5zX2g9KGMuaW5zX2g8PGMuaGFzaF9zaGlmdF5jLndpbmRvd1tjLnN0cnN0YXJ0K08tMV0pJmMuaGFzaF9tYXNrLEw9Yy5wcmV2W2Muc3Ryc3RhcnQmYy53X21hc2tdPWMuaGVhZFtjLmluc19oXSxjLmhlYWRbYy5pbnNfaF09Yy5zdHJzdGFydCwtLWMubWF0Y2hfbGVuZ3RoIT0wOyk7Yy5zdHJzdGFydCsrfWVsc2UgYy5zdHJzdGFydCs9Yy5tYXRjaF9sZW5ndGgsYy5tYXRjaF9sZW5ndGg9MCxjLmluc19oPWMud2luZG93W2Muc3Ryc3RhcnRdLGMuaW5zX2g9KGMuaW5zX2g8PGMuaGFzaF9zaGlmdF5jLndpbmRvd1tjLnN0cnN0YXJ0KzFdKSZjLmhhc2hfbWFzaztlbHNlIHk9by5fdHJfdGFsbHkoYywwLGMud2luZG93W2Muc3Ryc3RhcnRdKSxjLmxvb2thaGVhZC0tLGMuc3Ryc3RhcnQrKztpZih5JiYoVChjLCExKSxjLnN0cm0uYXZhaWxfb3V0PT09MCkpcmV0dXJuIGh9cmV0dXJuIGMuaW5zZXJ0PWMuc3Ryc3RhcnQ8Ty0xP2Muc3Ryc3RhcnQ6Ty0xLEg9PT1nPyhUKGMsITApLGMuc3RybS5hdmFpbF9vdXQ9PT0wP2hlOkspOmMubGFzdF9saXQmJihUKGMsITEpLGMuc3RybS5hdmFpbF9vdXQ9PT0wKT9oOkd9ZnVuY3Rpb24gU2UoYyxIKXtmb3IodmFyIEwseSxTOzspe2lmKGMubG9va2FoZWFkPFgpe2lmKExlKGMpLGMubG9va2FoZWFkPFgmJkg9PT1kKXJldHVybiBoO2lmKGMubG9va2FoZWFkPT09MClicmVha31pZihMPTAsYy5sb29rYWhlYWQ+PU8mJihjLmluc19oPShjLmluc19oPDxjLmhhc2hfc2hpZnReYy53aW5kb3dbYy5zdHJzdGFydCtPLTFdKSZjLmhhc2hfbWFzayxMPWMucHJldltjLnN0cnN0YXJ0JmMud19tYXNrXT1jLmhlYWRbYy5pbnNfaF0sYy5oZWFkW2MuaW5zX2hdPWMuc3Ryc3RhcnQpLGMucHJldl9sZW5ndGg9Yy5tYXRjaF9sZW5ndGgsYy5wcmV2X21hdGNoPWMubWF0Y2hfc3RhcnQsYy5tYXRjaF9sZW5ndGg9Ty0xLEwhPT0wJiZjLnByZXZfbGVuZ3RoPGMubWF4X2xhenlfbWF0Y2gmJmMuc3Ryc3RhcnQtTDw9Yy53X3NpemUtWCYmKGMubWF0Y2hfbGVuZ3RoPWooYyxMKSxjLm1hdGNoX2xlbmd0aDw9NSYmKGMuc3RyYXRlZ3k9PT0xfHxjLm1hdGNoX2xlbmd0aD09PU8mJjQwOTY8Yy5zdHJzdGFydC1jLm1hdGNoX3N0YXJ0KSYmKGMubWF0Y2hfbGVuZ3RoPU8tMSkpLGMucHJldl9sZW5ndGg+PU8mJmMubWF0Y2hfbGVuZ3RoPD1jLnByZXZfbGVuZ3RoKXtmb3IoUz1jLnN0cnN0YXJ0K2MubG9va2FoZWFkLU8seT1vLl90cl90YWxseShjLGMuc3Ryc3RhcnQtMS1jLnByZXZfbWF0Y2gsYy5wcmV2X2xlbmd0aC1PKSxjLmxvb2thaGVhZC09Yy5wcmV2X2xlbmd0aC0xLGMucHJldl9sZW5ndGgtPTI7KytjLnN0cnN0YXJ0PD1TJiYoYy5pbnNfaD0oYy5pbnNfaDw8Yy5oYXNoX3NoaWZ0XmMud2luZG93W2Muc3Ryc3RhcnQrTy0xXSkmYy5oYXNoX21hc2ssTD1jLnByZXZbYy5zdHJzdGFydCZjLndfbWFza109Yy5oZWFkW2MuaW5zX2hdLGMuaGVhZFtjLmluc19oXT1jLnN0cnN0YXJ0KSwtLWMucHJldl9sZW5ndGghPTA7KTtpZihjLm1hdGNoX2F2YWlsYWJsZT0wLGMubWF0Y2hfbGVuZ3RoPU8tMSxjLnN0cnN0YXJ0KysseSYmKFQoYywhMSksYy5zdHJtLmF2YWlsX291dD09PTApKXJldHVybiBofWVsc2UgaWYoYy5tYXRjaF9hdmFpbGFibGUpe2lmKCh5PW8uX3RyX3RhbGx5KGMsMCxjLndpbmRvd1tjLnN0cnN0YXJ0LTFdKSkmJlQoYywhMSksYy5zdHJzdGFydCsrLGMubG9va2FoZWFkLS0sYy5zdHJtLmF2YWlsX291dD09PTApcmV0dXJuIGh9ZWxzZSBjLm1hdGNoX2F2YWlsYWJsZT0xLGMuc3Ryc3RhcnQrKyxjLmxvb2thaGVhZC0tfXJldHVybiBjLm1hdGNoX2F2YWlsYWJsZSYmKHk9by5fdHJfdGFsbHkoYywwLGMud2luZG93W2Muc3Ryc3RhcnQtMV0pLGMubWF0Y2hfYXZhaWxhYmxlPTApLGMuaW5zZXJ0PWMuc3Ryc3RhcnQ8Ty0xP2Muc3Ryc3RhcnQ6Ty0xLEg9PT1nPyhUKGMsITApLGMuc3RybS5hdmFpbF9vdXQ9PT0wP2hlOkspOmMubGFzdF9saXQmJihUKGMsITEpLGMuc3RybS5hdmFpbF9vdXQ9PT0wKT9oOkd9ZnVuY3Rpb24gd2UoYyxILEwseSxTKXt0aGlzLmdvb2RfbGVuZ3RoPWMsdGhpcy5tYXhfbGF6eT1ILHRoaXMubmljZV9sZW5ndGg9TCx0aGlzLm1heF9jaGFpbj15LHRoaXMuZnVuYz1TfWZ1bmN0aW9uIFZlKCl7dGhpcy5zdHJtPW51bGwsdGhpcy5zdGF0dXM9MCx0aGlzLnBlbmRpbmdfYnVmPW51bGwsdGhpcy5wZW5kaW5nX2J1Zl9zaXplPTAsdGhpcy5wZW5kaW5nX291dD0wLHRoaXMucGVuZGluZz0wLHRoaXMud3JhcD0wLHRoaXMuZ3poZWFkPW51bGwsdGhpcy5nemluZGV4PTAsdGhpcy5tZXRob2Q9RSx0aGlzLmxhc3RfZmx1c2g9LTEsdGhpcy53X3NpemU9MCx0aGlzLndfYml0cz0wLHRoaXMud19tYXNrPTAsdGhpcy53aW5kb3c9bnVsbCx0aGlzLndpbmRvd19zaXplPTAsdGhpcy5wcmV2PW51bGwsdGhpcy5oZWFkPW51bGwsdGhpcy5pbnNfaD0wLHRoaXMuaGFzaF9zaXplPTAsdGhpcy5oYXNoX2JpdHM9MCx0aGlzLmhhc2hfbWFzaz0wLHRoaXMuaGFzaF9zaGlmdD0wLHRoaXMuYmxvY2tfc3RhcnQ9MCx0aGlzLm1hdGNoX2xlbmd0aD0wLHRoaXMucHJldl9tYXRjaD0wLHRoaXMubWF0Y2hfYXZhaWxhYmxlPTAsdGhpcy5zdHJzdGFydD0wLHRoaXMubWF0Y2hfc3RhcnQ9MCx0aGlzLmxvb2thaGVhZD0wLHRoaXMucHJldl9sZW5ndGg9MCx0aGlzLm1heF9jaGFpbl9sZW5ndGg9MCx0aGlzLm1heF9sYXp5X21hdGNoPTAsdGhpcy5sZXZlbD0wLHRoaXMuc3RyYXRlZ3k9MCx0aGlzLmdvb2RfbWF0Y2g9MCx0aGlzLm5pY2VfbWF0Y2g9MCx0aGlzLmR5bl9sdHJlZT1uZXcgYS5CdWYxNigyKk0pLHRoaXMuZHluX2R0cmVlPW5ldyBhLkJ1ZjE2KDIqKDIqSSsxKSksdGhpcy5ibF90cmVlPW5ldyBhLkJ1ZjE2KDIqKDIqUisxKSksc2UodGhpcy5keW5fbHRyZWUpLHNlKHRoaXMuZHluX2R0cmVlKSxzZSh0aGlzLmJsX3RyZWUpLHRoaXMubF9kZXNjPW51bGwsdGhpcy5kX2Rlc2M9bnVsbCx0aGlzLmJsX2Rlc2M9bnVsbCx0aGlzLmJsX2NvdW50PW5ldyBhLkJ1ZjE2KFcrMSksdGhpcy5oZWFwPW5ldyBhLkJ1ZjE2KDIqTisxKSxzZSh0aGlzLmhlYXApLHRoaXMuaGVhcF9sZW49MCx0aGlzLmhlYXBfbWF4PTAsdGhpcy5kZXB0aD1uZXcgYS5CdWYxNigyKk4rMSksc2UodGhpcy5kZXB0aCksdGhpcy5sX2J1Zj0wLHRoaXMubGl0X2J1ZnNpemU9MCx0aGlzLmxhc3RfbGl0PTAsdGhpcy5kX2J1Zj0wLHRoaXMub3B0X2xlbj0wLHRoaXMuc3RhdGljX2xlbj0wLHRoaXMubWF0Y2hlcz0wLHRoaXMuaW5zZXJ0PTAsdGhpcy5iaV9idWY9MCx0aGlzLmJpX3ZhbGlkPTB9ZnVuY3Rpb24gUGUoYyl7dmFyIEg7cmV0dXJuIGMmJmMuc3RhdGU/KGMudG90YWxfaW49Yy50b3RhbF9vdXQ9MCxjLmRhdGFfdHlwZT1tLChIPWMuc3RhdGUpLnBlbmRpbmc9MCxILnBlbmRpbmdfb3V0PTAsSC53cmFwPDAmJihILndyYXA9LUgud3JhcCksSC5zdGF0dXM9SC53cmFwP3Y6UCxjLmFkbGVyPUgud3JhcD09PTI/MDoxLEgubGFzdF9mbHVzaD1kLG8uX3RyX2luaXQoSCksZik6QWUoYyxDKX1mdW5jdGlvbiBQdChjKXt2YXIgSD1QZShjKTtyZXR1cm4gSD09PWYmJmZ1bmN0aW9uKEwpe0wud2luZG93X3NpemU9MipMLndfc2l6ZSxzZShMLmhlYWQpLEwubWF4X2xhenlfbWF0Y2g9aVtMLmxldmVsXS5tYXhfbGF6eSxMLmdvb2RfbWF0Y2g9aVtMLmxldmVsXS5nb29kX2xlbmd0aCxMLm5pY2VfbWF0Y2g9aVtMLmxldmVsXS5uaWNlX2xlbmd0aCxMLm1heF9jaGFpbl9sZW5ndGg9aVtMLmxldmVsXS5tYXhfY2hhaW4sTC5zdHJzdGFydD0wLEwuYmxvY2tfc3RhcnQ9MCxMLmxvb2thaGVhZD0wLEwuaW5zZXJ0PTAsTC5tYXRjaF9sZW5ndGg9TC5wcmV2X2xlbmd0aD1PLTEsTC5tYXRjaF9hdmFpbGFibGU9MCxMLmluc19oPTB9KGMuc3RhdGUpLEh9ZnVuY3Rpb24ga3QoYyxILEwseSxTLGspe2lmKCFjKXJldHVybiBDO3ZhciBRPTE7aWYoSD09PXAmJihIPTYpLHk8MD8oUT0wLHk9LXkpOjE1PHkmJihRPTIseS09MTYpLFM8MXx8dzxTfHxMIT09RXx8eTw4fHwxNTx5fHxIPDB8fDk8SHx8azwwfHxiPGspcmV0dXJuIEFlKGMsQyk7eT09PTgmJih5PTkpO3ZhciBZPW5ldyBWZTtyZXR1cm4oYy5zdGF0ZT1ZKS5zdHJtPWMsWS53cmFwPVEsWS5nemhlYWQ9bnVsbCxZLndfYml0cz15LFkud19zaXplPTE8PFkud19iaXRzLFkud19tYXNrPVkud19zaXplLTEsWS5oYXNoX2JpdHM9Uys3LFkuaGFzaF9zaXplPTE8PFkuaGFzaF9iaXRzLFkuaGFzaF9tYXNrPVkuaGFzaF9zaXplLTEsWS5oYXNoX3NoaWZ0PX5+KChZLmhhc2hfYml0cytPLTEpL08pLFkud2luZG93PW5ldyBhLkJ1ZjgoMipZLndfc2l6ZSksWS5oZWFkPW5ldyBhLkJ1ZjE2KFkuaGFzaF9zaXplKSxZLnByZXY9bmV3IGEuQnVmMTYoWS53X3NpemUpLFkubGl0X2J1ZnNpemU9MTw8Uys2LFkucGVuZGluZ19idWZfc2l6ZT00KlkubGl0X2J1ZnNpemUsWS5wZW5kaW5nX2J1Zj1uZXcgYS5CdWY4KFkucGVuZGluZ19idWZfc2l6ZSksWS5kX2J1Zj0xKlkubGl0X2J1ZnNpemUsWS5sX2J1Zj0zKlkubGl0X2J1ZnNpemUsWS5sZXZlbD1ILFkuc3RyYXRlZ3k9ayxZLm1ldGhvZD1MLFB0KGMpfWk9W25ldyB3ZSgwLDAsMCwwLGZ1bmN0aW9uKGMsSCl7dmFyIEw9NjU1MzU7Zm9yKEw+Yy5wZW5kaW5nX2J1Zl9zaXplLTUmJihMPWMucGVuZGluZ19idWZfc2l6ZS01KTs7KXtpZihjLmxvb2thaGVhZDw9MSl7aWYoTGUoYyksYy5sb29rYWhlYWQ9PT0wJiZIPT09ZClyZXR1cm4gaDtpZihjLmxvb2thaGVhZD09PTApYnJlYWt9Yy5zdHJzdGFydCs9Yy5sb29rYWhlYWQsYy5sb29rYWhlYWQ9MDt2YXIgeT1jLmJsb2NrX3N0YXJ0K0w7aWYoKGMuc3Ryc3RhcnQ9PT0wfHxjLnN0cnN0YXJ0Pj15KSYmKGMubG9va2FoZWFkPWMuc3Ryc3RhcnQteSxjLnN0cnN0YXJ0PXksVChjLCExKSxjLnN0cm0uYXZhaWxfb3V0PT09MCl8fGMuc3Ryc3RhcnQtYy5ibG9ja19zdGFydD49Yy53X3NpemUtWCYmKFQoYywhMSksYy5zdHJtLmF2YWlsX291dD09PTApKXJldHVybiBofXJldHVybiBjLmluc2VydD0wLEg9PT1nPyhUKGMsITApLGMuc3RybS5hdmFpbF9vdXQ9PT0wP2hlOkspOihjLnN0cnN0YXJ0PmMuYmxvY2tfc3RhcnQmJihUKGMsITEpLGMuc3RybS5hdmFpbF9vdXQpLGgpfSksbmV3IHdlKDQsNCw4LDQsJGUpLG5ldyB3ZSg0LDUsMTYsOCwkZSksbmV3IHdlKDQsNiwzMiwzMiwkZSksbmV3IHdlKDQsNCwxNiwxNixTZSksbmV3IHdlKDgsMTYsMzIsMzIsU2UpLG5ldyB3ZSg4LDE2LDEyOCwxMjgsU2UpLG5ldyB3ZSg4LDMyLDEyOCwyNTYsU2UpLG5ldyB3ZSgzMiwxMjgsMjU4LDEwMjQsU2UpLG5ldyB3ZSgzMiwyNTgsMjU4LDQwOTYsU2UpXSxzLmRlZmxhdGVJbml0PWZ1bmN0aW9uKGMsSCl7cmV0dXJuIGt0KGMsSCxFLDE1LDgsMCl9LHMuZGVmbGF0ZUluaXQyPWt0LHMuZGVmbGF0ZVJlc2V0PVB0LHMuZGVmbGF0ZVJlc2V0S2VlcD1QZSxzLmRlZmxhdGVTZXRIZWFkZXI9ZnVuY3Rpb24oYyxIKXtyZXR1cm4gYyYmYy5zdGF0ZT9jLnN0YXRlLndyYXAhPT0yP0M6KGMuc3RhdGUuZ3poZWFkPUgsZik6Q30scy5kZWZsYXRlPWZ1bmN0aW9uKGMsSCl7dmFyIEwseSxTLGs7aWYoIWN8fCFjLnN0YXRlfHw1PEh8fEg8MClyZXR1cm4gYz9BZShjLEMpOkM7aWYoeT1jLnN0YXRlLCFjLm91dHB1dHx8IWMuaW5wdXQmJmMuYXZhaWxfaW4hPT0wfHx5LnN0YXR1cz09PTY2NiYmSCE9PWcpcmV0dXJuIEFlKGMsYy5hdmFpbF9vdXQ9PT0wPy01OkMpO2lmKHkuc3RybT1jLEw9eS5sYXN0X2ZsdXNoLHkubGFzdF9mbHVzaD1ILHkuc3RhdHVzPT09dilpZih5LndyYXA9PT0yKWMuYWRsZXI9MCx1ZSh5LDMxKSx1ZSh5LDEzOSksdWUoeSw4KSx5Lmd6aGVhZD8odWUoeSwoeS5nemhlYWQudGV4dD8xOjApKyh5Lmd6aGVhZC5oY3JjPzI6MCkrKHkuZ3poZWFkLmV4dHJhPzQ6MCkrKHkuZ3poZWFkLm5hbWU/ODowKSsoeS5nemhlYWQuY29tbWVudD8xNjowKSksdWUoeSwyNTUmeS5nemhlYWQudGltZSksdWUoeSx5Lmd6aGVhZC50aW1lPj44JjI1NSksdWUoeSx5Lmd6aGVhZC50aW1lPj4xNiYyNTUpLHVlKHkseS5nemhlYWQudGltZT4+MjQmMjU1KSx1ZSh5LHkubGV2ZWw9PT05PzI6Mjw9eS5zdHJhdGVneXx8eS5sZXZlbDwyPzQ6MCksdWUoeSwyNTUmeS5nemhlYWQub3MpLHkuZ3poZWFkLmV4dHJhJiZ5Lmd6aGVhZC5leHRyYS5sZW5ndGgmJih1ZSh5LDI1NSZ5Lmd6aGVhZC5leHRyYS5sZW5ndGgpLHVlKHkseS5nemhlYWQuZXh0cmEubGVuZ3RoPj44JjI1NSkpLHkuZ3poZWFkLmhjcmMmJihjLmFkbGVyPWwoYy5hZGxlcix5LnBlbmRpbmdfYnVmLHkucGVuZGluZywwKSkseS5nemluZGV4PTAseS5zdGF0dXM9NjkpOih1ZSh5LDApLHVlKHksMCksdWUoeSwwKSx1ZSh5LDApLHVlKHksMCksdWUoeSx5LmxldmVsPT09OT8yOjI8PXkuc3RyYXRlZ3l8fHkubGV2ZWw8Mj80OjApLHVlKHksMykseS5zdGF0dXM9UCk7ZWxzZXt2YXIgUT1FKyh5LndfYml0cy04PDw0KTw8ODtRfD0oMjw9eS5zdHJhdGVneXx8eS5sZXZlbDwyPzA6eS5sZXZlbDw2PzE6eS5sZXZlbD09PTY/MjozKTw8Nix5LnN0cnN0YXJ0IT09MCYmKFF8PTMyKSxRKz0zMS1RJTMxLHkuc3RhdHVzPVAsdGUoeSxRKSx5LnN0cnN0YXJ0IT09MCYmKHRlKHksYy5hZGxlcj4+PjE2KSx0ZSh5LDY1NTM1JmMuYWRsZXIpKSxjLmFkbGVyPTF9aWYoeS5zdGF0dXM9PT02OSlpZih5Lmd6aGVhZC5leHRyYSl7Zm9yKFM9eS5wZW5kaW5nO3kuZ3ppbmRleDwoNjU1MzUmeS5nemhlYWQuZXh0cmEubGVuZ3RoKSYmKHkucGVuZGluZyE9PXkucGVuZGluZ19idWZfc2l6ZXx8KHkuZ3poZWFkLmhjcmMmJnkucGVuZGluZz5TJiYoYy5hZGxlcj1sKGMuYWRsZXIseS5wZW5kaW5nX2J1Zix5LnBlbmRpbmctUyxTKSksRihjKSxTPXkucGVuZGluZyx5LnBlbmRpbmchPT15LnBlbmRpbmdfYnVmX3NpemUpKTspdWUoeSwyNTUmeS5nemhlYWQuZXh0cmFbeS5nemluZGV4XSkseS5nemluZGV4Kys7eS5nemhlYWQuaGNyYyYmeS5wZW5kaW5nPlMmJihjLmFkbGVyPWwoYy5hZGxlcix5LnBlbmRpbmdfYnVmLHkucGVuZGluZy1TLFMpKSx5Lmd6aW5kZXg9PT15Lmd6aGVhZC5leHRyYS5sZW5ndGgmJih5Lmd6aW5kZXg9MCx5LnN0YXR1cz03Myl9ZWxzZSB5LnN0YXR1cz03MztpZih5LnN0YXR1cz09PTczKWlmKHkuZ3poZWFkLm5hbWUpe1M9eS5wZW5kaW5nO2Rve2lmKHkucGVuZGluZz09PXkucGVuZGluZ19idWZfc2l6ZSYmKHkuZ3poZWFkLmhjcmMmJnkucGVuZGluZz5TJiYoYy5hZGxlcj1sKGMuYWRsZXIseS5wZW5kaW5nX2J1Zix5LnBlbmRpbmctUyxTKSksRihjKSxTPXkucGVuZGluZyx5LnBlbmRpbmc9PT15LnBlbmRpbmdfYnVmX3NpemUpKXtrPTE7YnJlYWt9az15Lmd6aW5kZXg8eS5nemhlYWQubmFtZS5sZW5ndGg/MjU1JnkuZ3poZWFkLm5hbWUuY2hhckNvZGVBdCh5Lmd6aW5kZXgrKyk6MCx1ZSh5LGspfXdoaWxlKGshPT0wKTt5Lmd6aGVhZC5oY3JjJiZ5LnBlbmRpbmc+UyYmKGMuYWRsZXI9bChjLmFkbGVyLHkucGVuZGluZ19idWYseS5wZW5kaW5nLVMsUykpLGs9PT0wJiYoeS5nemluZGV4PTAseS5zdGF0dXM9OTEpfWVsc2UgeS5zdGF0dXM9OTE7aWYoeS5zdGF0dXM9PT05MSlpZih5Lmd6aGVhZC5jb21tZW50KXtTPXkucGVuZGluZztkb3tpZih5LnBlbmRpbmc9PT15LnBlbmRpbmdfYnVmX3NpemUmJih5Lmd6aGVhZC5oY3JjJiZ5LnBlbmRpbmc+UyYmKGMuYWRsZXI9bChjLmFkbGVyLHkucGVuZGluZ19idWYseS5wZW5kaW5nLVMsUykpLEYoYyksUz15LnBlbmRpbmcseS5wZW5kaW5nPT09eS5wZW5kaW5nX2J1Zl9zaXplKSl7az0xO2JyZWFrfWs9eS5nemluZGV4PHkuZ3poZWFkLmNvbW1lbnQubGVuZ3RoPzI1NSZ5Lmd6aGVhZC5jb21tZW50LmNoYXJDb2RlQXQoeS5nemluZGV4KyspOjAsdWUoeSxrKX13aGlsZShrIT09MCk7eS5nemhlYWQuaGNyYyYmeS5wZW5kaW5nPlMmJihjLmFkbGVyPWwoYy5hZGxlcix5LnBlbmRpbmdfYnVmLHkucGVuZGluZy1TLFMpKSxrPT09MCYmKHkuc3RhdHVzPTEwMyl9ZWxzZSB5LnN0YXR1cz0xMDM7aWYoeS5zdGF0dXM9PT0xMDMmJih5Lmd6aGVhZC5oY3JjPyh5LnBlbmRpbmcrMj55LnBlbmRpbmdfYnVmX3NpemUmJkYoYykseS5wZW5kaW5nKzI8PXkucGVuZGluZ19idWZfc2l6ZSYmKHVlKHksMjU1JmMuYWRsZXIpLHVlKHksYy5hZGxlcj4+OCYyNTUpLGMuYWRsZXI9MCx5LnN0YXR1cz1QKSk6eS5zdGF0dXM9UCkseS5wZW5kaW5nIT09MCl7aWYoRihjKSxjLmF2YWlsX291dD09PTApcmV0dXJuIHkubGFzdF9mbHVzaD0tMSxmfWVsc2UgaWYoYy5hdmFpbF9pbj09PTAmJlUoSCk8PVUoTCkmJkghPT1nKXJldHVybiBBZShjLC01KTtpZih5LnN0YXR1cz09PTY2NiYmYy5hdmFpbF9pbiE9PTApcmV0dXJuIEFlKGMsLTUpO2lmKGMuYXZhaWxfaW4hPT0wfHx5Lmxvb2thaGVhZCE9PTB8fEghPT1kJiZ5LnN0YXR1cyE9PTY2Nil7dmFyIFk9eS5zdHJhdGVneT09PTI/ZnVuY3Rpb24oeCxKKXtmb3IodmFyIHJlOzspe2lmKHgubG9va2FoZWFkPT09MCYmKExlKHgpLHgubG9va2FoZWFkPT09MCkpe2lmKEo9PT1kKXJldHVybiBoO2JyZWFrfWlmKHgubWF0Y2hfbGVuZ3RoPTAscmU9by5fdHJfdGFsbHkoeCwwLHgud2luZG93W3guc3Ryc3RhcnRdKSx4Lmxvb2thaGVhZC0tLHguc3Ryc3RhcnQrKyxyZSYmKFQoeCwhMSkseC5zdHJtLmF2YWlsX291dD09PTApKXJldHVybiBofXJldHVybiB4Lmluc2VydD0wLEo9PT1nPyhUKHgsITApLHguc3RybS5hdmFpbF9vdXQ9PT0wP2hlOkspOngubGFzdF9saXQmJihUKHgsITEpLHguc3RybS5hdmFpbF9vdXQ9PT0wKT9oOkd9KHksSCk6eS5zdHJhdGVneT09PTM/ZnVuY3Rpb24oeCxKKXtmb3IodmFyIHJlLHEsb2UseGUsRWU9eC53aW5kb3c7Oyl7aWYoeC5sb29rYWhlYWQ8PVYpe2lmKExlKHgpLHgubG9va2FoZWFkPD1WJiZKPT09ZClyZXR1cm4gaDtpZih4Lmxvb2thaGVhZD09PTApYnJlYWt9aWYoeC5tYXRjaF9sZW5ndGg9MCx4Lmxvb2thaGVhZD49TyYmMDx4LnN0cnN0YXJ0JiYocT1FZVtvZT14LnN0cnN0YXJ0LTFdKT09PUVlWysrb2VdJiZxPT09RWVbKytvZV0mJnE9PT1FZVsrK29lXSl7eGU9eC5zdHJzdGFydCtWO2RvO3doaWxlKHE9PT1FZVsrK29lXSYmcT09PUVlWysrb2VdJiZxPT09RWVbKytvZV0mJnE9PT1FZVsrK29lXSYmcT09PUVlWysrb2VdJiZxPT09RWVbKytvZV0mJnE9PT1FZVsrK29lXSYmcT09PUVlWysrb2VdJiZvZTx4ZSk7eC5tYXRjaF9sZW5ndGg9Vi0oeGUtb2UpLHgubWF0Y2hfbGVuZ3RoPngubG9va2FoZWFkJiYoeC5tYXRjaF9sZW5ndGg9eC5sb29rYWhlYWQpfWlmKHgubWF0Y2hfbGVuZ3RoPj1PPyhyZT1vLl90cl90YWxseSh4LDEseC5tYXRjaF9sZW5ndGgtTykseC5sb29rYWhlYWQtPXgubWF0Y2hfbGVuZ3RoLHguc3Ryc3RhcnQrPXgubWF0Y2hfbGVuZ3RoLHgubWF0Y2hfbGVuZ3RoPTApOihyZT1vLl90cl90YWxseSh4LDAseC53aW5kb3dbeC5zdHJzdGFydF0pLHgubG9va2FoZWFkLS0seC5zdHJzdGFydCsrKSxyZSYmKFQoeCwhMSkseC5zdHJtLmF2YWlsX291dD09PTApKXJldHVybiBofXJldHVybiB4Lmluc2VydD0wLEo9PT1nPyhUKHgsITApLHguc3RybS5hdmFpbF9vdXQ9PT0wP2hlOkspOngubGFzdF9saXQmJihUKHgsITEpLHguc3RybS5hdmFpbF9vdXQ9PT0wKT9oOkd9KHksSCk6aVt5LmxldmVsXS5mdW5jKHksSCk7aWYoWSE9PWhlJiZZIT09S3x8KHkuc3RhdHVzPTY2NiksWT09PWh8fFk9PT1oZSlyZXR1cm4gYy5hdmFpbF9vdXQ9PT0wJiYoeS5sYXN0X2ZsdXNoPS0xKSxmO2lmKFk9PT1HJiYoSD09PTE/by5fdHJfYWxpZ24oeSk6SCE9PTUmJihvLl90cl9zdG9yZWRfYmxvY2soeSwwLDAsITEpLEg9PT0zJiYoc2UoeS5oZWFkKSx5Lmxvb2thaGVhZD09PTAmJih5LnN0cnN0YXJ0PTAseS5ibG9ja19zdGFydD0wLHkuaW5zZXJ0PTApKSksRihjKSxjLmF2YWlsX291dD09PTApKXJldHVybiB5Lmxhc3RfZmx1c2g9LTEsZn1yZXR1cm4gSCE9PWc/Zjp5LndyYXA8PTA/MTooeS53cmFwPT09Mj8odWUoeSwyNTUmYy5hZGxlciksdWUoeSxjLmFkbGVyPj44JjI1NSksdWUoeSxjLmFkbGVyPj4xNiYyNTUpLHVlKHksYy5hZGxlcj4+MjQmMjU1KSx1ZSh5LDI1NSZjLnRvdGFsX2luKSx1ZSh5LGMudG90YWxfaW4+PjgmMjU1KSx1ZSh5LGMudG90YWxfaW4+PjE2JjI1NSksdWUoeSxjLnRvdGFsX2luPj4yNCYyNTUpKToodGUoeSxjLmFkbGVyPj4+MTYpLHRlKHksNjU1MzUmYy5hZGxlcikpLEYoYyksMDx5LndyYXAmJih5LndyYXA9LXkud3JhcCkseS5wZW5kaW5nIT09MD9mOjEpfSxzLmRlZmxhdGVFbmQ9ZnVuY3Rpb24oYyl7dmFyIEg7cmV0dXJuIGMmJmMuc3RhdGU/KEg9Yy5zdGF0ZS5zdGF0dXMpIT09diYmSCE9PTY5JiZIIT09NzMmJkghPT05MSYmSCE9PTEwMyYmSCE9PVAmJkghPT02NjY/QWUoYyxDKTooYy5zdGF0ZT1udWxsLEg9PT1QP0FlKGMsLTMpOmYpOkN9LHMuZGVmbGF0ZVNldERpY3Rpb25hcnk9ZnVuY3Rpb24oYyxIKXt2YXIgTCx5LFMsayxRLFkseCxKLHJlPUgubGVuZ3RoO2lmKCFjfHwhYy5zdGF0ZXx8KGs9KEw9Yy5zdGF0ZSkud3JhcCk9PT0yfHxrPT09MSYmTC5zdGF0dXMhPT12fHxMLmxvb2thaGVhZClyZXR1cm4gQztmb3Ioaz09PTEmJihjLmFkbGVyPXUoYy5hZGxlcixILHJlLDApKSxMLndyYXA9MCxyZT49TC53X3NpemUmJihrPT09MCYmKHNlKEwuaGVhZCksTC5zdHJzdGFydD0wLEwuYmxvY2tfc3RhcnQ9MCxMLmluc2VydD0wKSxKPW5ldyBhLkJ1ZjgoTC53X3NpemUpLGEuYXJyYXlTZXQoSixILHJlLUwud19zaXplLEwud19zaXplLDApLEg9SixyZT1MLndfc2l6ZSksUT1jLmF2YWlsX2luLFk9Yy5uZXh0X2luLHg9Yy5pbnB1dCxjLmF2YWlsX2luPXJlLGMubmV4dF9pbj0wLGMuaW5wdXQ9SCxMZShMKTtMLmxvb2thaGVhZD49Tzspe2Zvcih5PUwuc3Ryc3RhcnQsUz1MLmxvb2thaGVhZC0oTy0xKTtMLmluc19oPShMLmluc19oPDxMLmhhc2hfc2hpZnReTC53aW5kb3dbeStPLTFdKSZMLmhhc2hfbWFzayxMLnByZXZbeSZMLndfbWFza109TC5oZWFkW0wuaW5zX2hdLEwuaGVhZFtMLmluc19oXT15LHkrKywtLVM7KTtMLnN0cnN0YXJ0PXksTC5sb29rYWhlYWQ9Ty0xLExlKEwpfXJldHVybiBMLnN0cnN0YXJ0Kz1MLmxvb2thaGVhZCxMLmJsb2NrX3N0YXJ0PUwuc3Ryc3RhcnQsTC5pbnNlcnQ9TC5sb29rYWhlYWQsTC5sb29rYWhlYWQ9MCxMLm1hdGNoX2xlbmd0aD1MLnByZXZfbGVuZ3RoPU8tMSxMLm1hdGNoX2F2YWlsYWJsZT0wLGMubmV4dF9pbj1ZLGMuaW5wdXQ9eCxjLmF2YWlsX2luPVEsTC53cmFwPWssZn0scy5kZWZsYXRlSW5mbz0icGFrbyBkZWZsYXRlIChmcm9tIE5vZGVjYSBwcm9qZWN0KSJ9LHsiLi4vdXRpbHMvY29tbW9uIjo0MSwiLi9hZGxlcjMyIjo0MywiLi9jcmMzMiI6NDUsIi4vbWVzc2FnZXMiOjUxLCIuL3RyZWVzIjo1Mn1dLDQ3OltmdW5jdGlvbih0LG4scyl7bi5leHBvcnRzPWZ1bmN0aW9uKCl7dGhpcy50ZXh0PTAsdGhpcy50aW1lPTAsdGhpcy54ZmxhZ3M9MCx0aGlzLm9zPTAsdGhpcy5leHRyYT1udWxsLHRoaXMuZXh0cmFfbGVuPTAsdGhpcy5uYW1lPSIiLHRoaXMuY29tbWVudD0iIix0aGlzLmhjcmM9MCx0aGlzLmRvbmU9ITF9fSx7fV0sNDg6W2Z1bmN0aW9uKHQsbixzKXtuLmV4cG9ydHM9ZnVuY3Rpb24oaSxhKXt2YXIgbyx1LGwsQSxkLGcsZixDLHAsYixtLEUsdyxOLEksUixNLFcsTyxWLFgsdixQLGgsRztvPWkuc3RhdGUsdT1pLm5leHRfaW4saD1pLmlucHV0LGw9dSsoaS5hdmFpbF9pbi01KSxBPWkubmV4dF9vdXQsRz1pLm91dHB1dCxkPUEtKGEtaS5hdmFpbF9vdXQpLGc9QSsoaS5hdmFpbF9vdXQtMjU3KSxmPW8uZG1heCxDPW8ud3NpemUscD1vLndoYXZlLGI9by53bmV4dCxtPW8ud2luZG93LEU9by5ob2xkLHc9by5iaXRzLE49by5sZW5jb2RlLEk9by5kaXN0Y29kZSxSPSgxPDxvLmxlbmJpdHMpLTEsTT0oMTw8by5kaXN0Yml0cyktMTtlOmRve3c8MTUmJihFKz1oW3UrK108PHcsdys9OCxFKz1oW3UrK108PHcsdys9OCksVz1OW0UmUl07dDpmb3IoOzspe2lmKEU+Pj49Tz1XPj4+MjQsdy09TywoTz1XPj4+MTYmMjU1KT09PTApR1tBKytdPTY1NTM1Jlc7ZWxzZXtpZighKDE2Jk8pKXtpZighKDY0Jk8pKXtXPU5bKDY1NTM1JlcpKyhFJigxPDxPKS0xKV07Y29udGludWUgdH1pZigzMiZPKXtvLm1vZGU9MTI7YnJlYWsgZX1pLm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIixvLm1vZGU9MzA7YnJlYWsgZX1WPTY1NTM1JlcsKE8mPTE1KSYmKHc8TyYmKEUrPWhbdSsrXTw8dyx3Kz04KSxWKz1FJigxPDxPKS0xLEU+Pj49Tyx3LT1PKSx3PDE1JiYoRSs9aFt1KytdPDx3LHcrPTgsRSs9aFt1KytdPDx3LHcrPTgpLFc9SVtFJk1dO3I6Zm9yKDs7KXtpZihFPj4+PU89Vz4+PjI0LHctPU8sISgxNiYoTz1XPj4+MTYmMjU1KSkpe2lmKCEoNjQmTykpe1c9SVsoNjU1MzUmVykrKEUmKDE8PE8pLTEpXTtjb250aW51ZSByfWkubXNnPSJpbnZhbGlkIGRpc3RhbmNlIGNvZGUiLG8ubW9kZT0zMDticmVhayBlfWlmKFg9NjU1MzUmVyx3PChPJj0xNSkmJihFKz1oW3UrK108PHcsKHcrPTgpPE8mJihFKz1oW3UrK108PHcsdys9OCkpLGY8KFgrPUUmKDE8PE8pLTEpKXtpLm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLG8ubW9kZT0zMDticmVhayBlfWlmKEU+Pj49Tyx3LT1PLChPPUEtZCk8WCl7aWYocDwoTz1YLU8pJiZvLnNhbmUpe2kubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsby5tb2RlPTMwO2JyZWFrIGV9aWYoUD1tLCh2PTApPT09Yil7aWYodis9Qy1PLE88Vil7Zm9yKFYtPU87R1tBKytdPW1bdisrXSwtLU87KTt2PUEtWCxQPUd9fWVsc2UgaWYoYjxPKXtpZih2Kz1DK2ItTywoTy09Yik8Vil7Zm9yKFYtPU87R1tBKytdPW1bdisrXSwtLU87KTtpZih2PTAsYjxWKXtmb3IoVi09Tz1iO0dbQSsrXT1tW3YrK10sLS1POyk7dj1BLVgsUD1HfX19ZWxzZSBpZih2Kz1iLU8sTzxWKXtmb3IoVi09TztHW0ErK109bVt2KytdLC0tTzspO3Y9QS1YLFA9R31mb3IoOzI8VjspR1tBKytdPVBbdisrXSxHW0ErK109UFt2KytdLEdbQSsrXT1QW3YrK10sVi09MztWJiYoR1tBKytdPVBbdisrXSwxPFYmJihHW0ErK109UFt2KytdKSl9ZWxzZXtmb3Iodj1BLVg7R1tBKytdPUdbdisrXSxHW0ErK109R1t2KytdLEdbQSsrXT1HW3YrK10sMjwoVi09Myk7KTtWJiYoR1tBKytdPUdbdisrXSwxPFYmJihHW0ErK109R1t2KytdKSl9YnJlYWt9fWJyZWFrfX13aGlsZSh1PGwmJkE8Zyk7dS09Vj13Pj4zLEUmPSgxPDwody09Vjw8MykpLTEsaS5uZXh0X2luPXUsaS5uZXh0X291dD1BLGkuYXZhaWxfaW49dTxsP2wtdSs1OjUtKHUtbCksaS5hdmFpbF9vdXQ9QTxnP2ctQSsyNTc6MjU3LShBLWcpLG8uaG9sZD1FLG8uYml0cz13fX0se31dLDQ5OltmdW5jdGlvbih0LG4scyl7dmFyIGk9dCgiLi4vdXRpbHMvY29tbW9uIiksYT10KCIuL2FkbGVyMzIiKSxvPXQoIi4vY3JjMzIiKSx1PXQoIi4vaW5mZmFzdCIpLGw9dCgiLi9pbmZ0cmVlcyIpLEE9MSxkPTIsZz0wLGY9LTIsQz0xLHA9ODUyLGI9NTkyO2Z1bmN0aW9uIG0odil7cmV0dXJuKHY+Pj4yNCYyNTUpKyh2Pj4+OCY2NTI4MCkrKCg2NTI4MCZ2KTw8OCkrKCgyNTUmdik8PDI0KX1mdW5jdGlvbiBFKCl7dGhpcy5tb2RlPTAsdGhpcy5sYXN0PSExLHRoaXMud3JhcD0wLHRoaXMuaGF2ZWRpY3Q9ITEsdGhpcy5mbGFncz0wLHRoaXMuZG1heD0wLHRoaXMuY2hlY2s9MCx0aGlzLnRvdGFsPTAsdGhpcy5oZWFkPW51bGwsdGhpcy53Yml0cz0wLHRoaXMud3NpemU9MCx0aGlzLndoYXZlPTAsdGhpcy53bmV4dD0wLHRoaXMud2luZG93PW51bGwsdGhpcy5ob2xkPTAsdGhpcy5iaXRzPTAsdGhpcy5sZW5ndGg9MCx0aGlzLm9mZnNldD0wLHRoaXMuZXh0cmE9MCx0aGlzLmxlbmNvZGU9bnVsbCx0aGlzLmRpc3Rjb2RlPW51bGwsdGhpcy5sZW5iaXRzPTAsdGhpcy5kaXN0Yml0cz0wLHRoaXMubmNvZGU9MCx0aGlzLm5sZW49MCx0aGlzLm5kaXN0PTAsdGhpcy5oYXZlPTAsdGhpcy5uZXh0PW51bGwsdGhpcy5sZW5zPW5ldyBpLkJ1ZjE2KDMyMCksdGhpcy53b3JrPW5ldyBpLkJ1ZjE2KDI4OCksdGhpcy5sZW5keW49bnVsbCx0aGlzLmRpc3RkeW49bnVsbCx0aGlzLnNhbmU9MCx0aGlzLmJhY2s9MCx0aGlzLndhcz0wfWZ1bmN0aW9uIHcodil7dmFyIFA7cmV0dXJuIHYmJnYuc3RhdGU/KFA9di5zdGF0ZSx2LnRvdGFsX2luPXYudG90YWxfb3V0PVAudG90YWw9MCx2Lm1zZz0iIixQLndyYXAmJih2LmFkbGVyPTEmUC53cmFwKSxQLm1vZGU9QyxQLmxhc3Q9MCxQLmhhdmVkaWN0PTAsUC5kbWF4PTMyNzY4LFAuaGVhZD1udWxsLFAuaG9sZD0wLFAuYml0cz0wLFAubGVuY29kZT1QLmxlbmR5bj1uZXcgaS5CdWYzMihwKSxQLmRpc3Rjb2RlPVAuZGlzdGR5bj1uZXcgaS5CdWYzMihiKSxQLnNhbmU9MSxQLmJhY2s9LTEsZyk6Zn1mdW5jdGlvbiBOKHYpe3ZhciBQO3JldHVybiB2JiZ2LnN0YXRlPygoUD12LnN0YXRlKS53c2l6ZT0wLFAud2hhdmU9MCxQLnduZXh0PTAsdyh2KSk6Zn1mdW5jdGlvbiBJKHYsUCl7dmFyIGgsRztyZXR1cm4gdiYmdi5zdGF0ZT8oRz12LnN0YXRlLFA8MD8oaD0wLFA9LVApOihoPTErKFA+PjQpLFA8NDgmJihQJj0xNSkpLFAmJihQPDh8fDE1PFApP2Y6KEcud2luZG93IT09bnVsbCYmRy53Yml0cyE9PVAmJihHLndpbmRvdz1udWxsKSxHLndyYXA9aCxHLndiaXRzPVAsTih2KSkpOmZ9ZnVuY3Rpb24gUih2LFApe3ZhciBoLEc7cmV0dXJuIHY/KEc9bmV3IEUsKHYuc3RhdGU9Rykud2luZG93PW51bGwsKGg9SSh2LFApKSE9PWcmJih2LnN0YXRlPW51bGwpLGgpOmZ9dmFyIE0sVyxPPSEwO2Z1bmN0aW9uIFYodil7aWYoTyl7dmFyIFA7Zm9yKE09bmV3IGkuQnVmMzIoNTEyKSxXPW5ldyBpLkJ1ZjMyKDMyKSxQPTA7UDwxNDQ7KXYubGVuc1tQKytdPTg7Zm9yKDtQPDI1Njspdi5sZW5zW1ArK109OTtmb3IoO1A8MjgwOyl2LmxlbnNbUCsrXT03O2Zvcig7UDwyODg7KXYubGVuc1tQKytdPTg7Zm9yKGwoQSx2LmxlbnMsMCwyODgsTSwwLHYud29yayx7Yml0czo5fSksUD0wO1A8MzI7KXYubGVuc1tQKytdPTU7bChkLHYubGVucywwLDMyLFcsMCx2Lndvcmsse2JpdHM6NX0pLE89ITF9di5sZW5jb2RlPU0sdi5sZW5iaXRzPTksdi5kaXN0Y29kZT1XLHYuZGlzdGJpdHM9NX1mdW5jdGlvbiBYKHYsUCxoLEcpe3ZhciBoZSxLPXYuc3RhdGU7cmV0dXJuIEsud2luZG93PT09bnVsbCYmKEsud3NpemU9MTw8Sy53Yml0cyxLLnduZXh0PTAsSy53aGF2ZT0wLEsud2luZG93PW5ldyBpLkJ1ZjgoSy53c2l6ZSkpLEc+PUsud3NpemU/KGkuYXJyYXlTZXQoSy53aW5kb3csUCxoLUsud3NpemUsSy53c2l6ZSwwKSxLLnduZXh0PTAsSy53aGF2ZT1LLndzaXplKTooRzwoaGU9Sy53c2l6ZS1LLnduZXh0KSYmKGhlPUcpLGkuYXJyYXlTZXQoSy53aW5kb3csUCxoLUcsaGUsSy53bmV4dCksKEctPWhlKT8oaS5hcnJheVNldChLLndpbmRvdyxQLGgtRyxHLDApLEsud25leHQ9RyxLLndoYXZlPUsud3NpemUpOihLLnduZXh0Kz1oZSxLLnduZXh0PT09Sy53c2l6ZSYmKEsud25leHQ9MCksSy53aGF2ZTxLLndzaXplJiYoSy53aGF2ZSs9aGUpKSksMH1zLmluZmxhdGVSZXNldD1OLHMuaW5mbGF0ZVJlc2V0Mj1JLHMuaW5mbGF0ZVJlc2V0S2VlcD13LHMuaW5mbGF0ZUluaXQ9ZnVuY3Rpb24odil7cmV0dXJuIFIodiwxNSl9LHMuaW5mbGF0ZUluaXQyPVIscy5pbmZsYXRlPWZ1bmN0aW9uKHYsUCl7dmFyIGgsRyxoZSxLLEFlLFUsc2UsRixULHVlLHRlLGosTGUsJGUsU2Usd2UsVmUsUGUsUHQsa3QsYyxILEwseSxTPTAsaz1uZXcgaS5CdWY4KDQpLFE9WzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdO2lmKCF2fHwhdi5zdGF0ZXx8IXYub3V0cHV0fHwhdi5pbnB1dCYmdi5hdmFpbF9pbiE9PTApcmV0dXJuIGY7KGg9di5zdGF0ZSkubW9kZT09PTEyJiYoaC5tb2RlPTEzKSxBZT12Lm5leHRfb3V0LGhlPXYub3V0cHV0LHNlPXYuYXZhaWxfb3V0LEs9di5uZXh0X2luLEc9di5pbnB1dCxVPXYuYXZhaWxfaW4sRj1oLmhvbGQsVD1oLmJpdHMsdWU9VSx0ZT1zZSxIPWc7ZTpmb3IoOzspc3dpdGNoKGgubW9kZSl7Y2FzZSBDOmlmKGgud3JhcD09PTApe2gubW9kZT0xMzticmVha31mb3IoO1Q8MTY7KXtpZihVPT09MClicmVhayBlO1UtLSxGKz1HW0srK108PFQsVCs9OH1pZigyJmgud3JhcCYmRj09PTM1NjE1KXtrW2guY2hlY2s9MF09MjU1JkYsa1sxXT1GPj4+OCYyNTUsaC5jaGVjaz1vKGguY2hlY2ssaywyLDApLFQ9Rj0wLGgubW9kZT0yO2JyZWFrfWlmKGguZmxhZ3M9MCxoLmhlYWQmJihoLmhlYWQuZG9uZT0hMSksISgxJmgud3JhcCl8fCgoKDI1NSZGKTw8OCkrKEY+PjgpKSUzMSl7di5tc2c9ImluY29ycmVjdCBoZWFkZXIgY2hlY2siLGgubW9kZT0zMDticmVha31pZigoMTUmRikhPTgpe3YubXNnPSJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCIsaC5tb2RlPTMwO2JyZWFrfWlmKFQtPTQsYz04KygxNSYoRj4+Pj00KSksaC53Yml0cz09PTApaC53Yml0cz1jO2Vsc2UgaWYoYz5oLndiaXRzKXt2Lm1zZz0iaW52YWxpZCB3aW5kb3cgc2l6ZSIsaC5tb2RlPTMwO2JyZWFrfWguZG1heD0xPDxjLHYuYWRsZXI9aC5jaGVjaz0xLGgubW9kZT01MTImRj8xMDoxMixUPUY9MDticmVhaztjYXNlIDI6Zm9yKDtUPDE2Oyl7aWYoVT09PTApYnJlYWsgZTtVLS0sRis9R1tLKytdPDxULFQrPTh9aWYoaC5mbGFncz1GLCgyNTUmaC5mbGFncykhPTgpe3YubXNnPSJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCIsaC5tb2RlPTMwO2JyZWFrfWlmKDU3MzQ0JmguZmxhZ3Mpe3YubXNnPSJ1bmtub3duIGhlYWRlciBmbGFncyBzZXQiLGgubW9kZT0zMDticmVha31oLmhlYWQmJihoLmhlYWQudGV4dD1GPj44JjEpLDUxMiZoLmZsYWdzJiYoa1swXT0yNTUmRixrWzFdPUY+Pj44JjI1NSxoLmNoZWNrPW8oaC5jaGVjayxrLDIsMCkpLFQ9Rj0wLGgubW9kZT0zO2Nhc2UgMzpmb3IoO1Q8MzI7KXtpZihVPT09MClicmVhayBlO1UtLSxGKz1HW0srK108PFQsVCs9OH1oLmhlYWQmJihoLmhlYWQudGltZT1GKSw1MTImaC5mbGFncyYmKGtbMF09MjU1JkYsa1sxXT1GPj4+OCYyNTUsa1syXT1GPj4+MTYmMjU1LGtbM109Rj4+PjI0JjI1NSxoLmNoZWNrPW8oaC5jaGVjayxrLDQsMCkpLFQ9Rj0wLGgubW9kZT00O2Nhc2UgNDpmb3IoO1Q8MTY7KXtpZihVPT09MClicmVhayBlO1UtLSxGKz1HW0srK108PFQsVCs9OH1oLmhlYWQmJihoLmhlYWQueGZsYWdzPTI1NSZGLGguaGVhZC5vcz1GPj44KSw1MTImaC5mbGFncyYmKGtbMF09MjU1JkYsa1sxXT1GPj4+OCYyNTUsaC5jaGVjaz1vKGguY2hlY2ssaywyLDApKSxUPUY9MCxoLm1vZGU9NTtjYXNlIDU6aWYoMTAyNCZoLmZsYWdzKXtmb3IoO1Q8MTY7KXtpZihVPT09MClicmVhayBlO1UtLSxGKz1HW0srK108PFQsVCs9OH1oLmxlbmd0aD1GLGguaGVhZCYmKGguaGVhZC5leHRyYV9sZW49RiksNTEyJmguZmxhZ3MmJihrWzBdPTI1NSZGLGtbMV09Rj4+PjgmMjU1LGguY2hlY2s9byhoLmNoZWNrLGssMiwwKSksVD1GPTB9ZWxzZSBoLmhlYWQmJihoLmhlYWQuZXh0cmE9bnVsbCk7aC5tb2RlPTY7Y2FzZSA2OmlmKDEwMjQmaC5mbGFncyYmKFU8KGo9aC5sZW5ndGgpJiYoaj1VKSxqJiYoaC5oZWFkJiYoYz1oLmhlYWQuZXh0cmFfbGVuLWgubGVuZ3RoLGguaGVhZC5leHRyYXx8KGguaGVhZC5leHRyYT1uZXcgQXJyYXkoaC5oZWFkLmV4dHJhX2xlbikpLGkuYXJyYXlTZXQoaC5oZWFkLmV4dHJhLEcsSyxqLGMpKSw1MTImaC5mbGFncyYmKGguY2hlY2s9byhoLmNoZWNrLEcsaixLKSksVS09aixLKz1qLGgubGVuZ3RoLT1qKSxoLmxlbmd0aCkpYnJlYWsgZTtoLmxlbmd0aD0wLGgubW9kZT03O2Nhc2UgNzppZigyMDQ4JmguZmxhZ3Mpe2lmKFU9PT0wKWJyZWFrIGU7Zm9yKGo9MDtjPUdbSytqKytdLGguaGVhZCYmYyYmaC5sZW5ndGg8NjU1MzYmJihoLmhlYWQubmFtZSs9U3RyaW5nLmZyb21DaGFyQ29kZShjKSksYyYmajxVOyk7aWYoNTEyJmguZmxhZ3MmJihoLmNoZWNrPW8oaC5jaGVjayxHLGosSykpLFUtPWosSys9aixjKWJyZWFrIGV9ZWxzZSBoLmhlYWQmJihoLmhlYWQubmFtZT1udWxsKTtoLmxlbmd0aD0wLGgubW9kZT04O2Nhc2UgODppZig0MDk2JmguZmxhZ3Mpe2lmKFU9PT0wKWJyZWFrIGU7Zm9yKGo9MDtjPUdbSytqKytdLGguaGVhZCYmYyYmaC5sZW5ndGg8NjU1MzYmJihoLmhlYWQuY29tbWVudCs9U3RyaW5nLmZyb21DaGFyQ29kZShjKSksYyYmajxVOyk7aWYoNTEyJmguZmxhZ3MmJihoLmNoZWNrPW8oaC5jaGVjayxHLGosSykpLFUtPWosSys9aixjKWJyZWFrIGV9ZWxzZSBoLmhlYWQmJihoLmhlYWQuY29tbWVudD1udWxsKTtoLm1vZGU9OTtjYXNlIDk6aWYoNTEyJmguZmxhZ3Mpe2Zvcig7VDwxNjspe2lmKFU9PT0wKWJyZWFrIGU7VS0tLEYrPUdbSysrXTw8VCxUKz04fWlmKEYhPT0oNjU1MzUmaC5jaGVjaykpe3YubXNnPSJoZWFkZXIgY3JjIG1pc21hdGNoIixoLm1vZGU9MzA7YnJlYWt9VD1GPTB9aC5oZWFkJiYoaC5oZWFkLmhjcmM9aC5mbGFncz4+OSYxLGguaGVhZC5kb25lPSEwKSx2LmFkbGVyPWguY2hlY2s9MCxoLm1vZGU9MTI7YnJlYWs7Y2FzZSAxMDpmb3IoO1Q8MzI7KXtpZihVPT09MClicmVhayBlO1UtLSxGKz1HW0srK108PFQsVCs9OH12LmFkbGVyPWguY2hlY2s9bShGKSxUPUY9MCxoLm1vZGU9MTE7Y2FzZSAxMTppZihoLmhhdmVkaWN0PT09MClyZXR1cm4gdi5uZXh0X291dD1BZSx2LmF2YWlsX291dD1zZSx2Lm5leHRfaW49Syx2LmF2YWlsX2luPVUsaC5ob2xkPUYsaC5iaXRzPVQsMjt2LmFkbGVyPWguY2hlY2s9MSxoLm1vZGU9MTI7Y2FzZSAxMjppZihQPT09NXx8UD09PTYpYnJlYWsgZTtjYXNlIDEzOmlmKGgubGFzdCl7Rj4+Pj03JlQsVC09NyZULGgubW9kZT0yNzticmVha31mb3IoO1Q8Mzspe2lmKFU9PT0wKWJyZWFrIGU7VS0tLEYrPUdbSysrXTw8VCxUKz04fXN3aXRjaChoLmxhc3Q9MSZGLFQtPTEsMyYoRj4+Pj0xKSl7Y2FzZSAwOmgubW9kZT0xNDticmVhaztjYXNlIDE6aWYoVihoKSxoLm1vZGU9MjAsUCE9PTYpYnJlYWs7Rj4+Pj0yLFQtPTI7YnJlYWsgZTtjYXNlIDI6aC5tb2RlPTE3O2JyZWFrO2Nhc2UgMzp2Lm1zZz0iaW52YWxpZCBibG9jayB0eXBlIixoLm1vZGU9MzB9Rj4+Pj0yLFQtPTI7YnJlYWs7Y2FzZSAxNDpmb3IoRj4+Pj03JlQsVC09NyZUO1Q8MzI7KXtpZihVPT09MClicmVhayBlO1UtLSxGKz1HW0srK108PFQsVCs9OH1pZigoNjU1MzUmRikhPShGPj4+MTZeNjU1MzUpKXt2Lm1zZz0iaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3RocyIsaC5tb2RlPTMwO2JyZWFrfWlmKGgubGVuZ3RoPTY1NTM1JkYsVD1GPTAsaC5tb2RlPTE1LFA9PT02KWJyZWFrIGU7Y2FzZSAxNTpoLm1vZGU9MTY7Y2FzZSAxNjppZihqPWgubGVuZ3RoKXtpZihVPGomJihqPVUpLHNlPGomJihqPXNlKSxqPT09MClicmVhayBlO2kuYXJyYXlTZXQoaGUsRyxLLGosQWUpLFUtPWosSys9aixzZS09aixBZSs9aixoLmxlbmd0aC09ajticmVha31oLm1vZGU9MTI7YnJlYWs7Y2FzZSAxNzpmb3IoO1Q8MTQ7KXtpZihVPT09MClicmVhayBlO1UtLSxGKz1HW0srK108PFQsVCs9OH1pZihoLm5sZW49MjU3KygzMSZGKSxGPj4+PTUsVC09NSxoLm5kaXN0PTErKDMxJkYpLEY+Pj49NSxULT01LGgubmNvZGU9NCsoMTUmRiksRj4+Pj00LFQtPTQsMjg2PGgubmxlbnx8MzA8aC5uZGlzdCl7di5tc2c9InRvbyBtYW55IGxlbmd0aCBvciBkaXN0YW5jZSBzeW1ib2xzIixoLm1vZGU9MzA7YnJlYWt9aC5oYXZlPTAsaC5tb2RlPTE4O2Nhc2UgMTg6Zm9yKDtoLmhhdmU8aC5uY29kZTspe2Zvcig7VDwzOyl7aWYoVT09PTApYnJlYWsgZTtVLS0sRis9R1tLKytdPDxULFQrPTh9aC5sZW5zW1FbaC5oYXZlKytdXT03JkYsRj4+Pj0zLFQtPTN9Zm9yKDtoLmhhdmU8MTk7KWgubGVuc1tRW2guaGF2ZSsrXV09MDtpZihoLmxlbmNvZGU9aC5sZW5keW4saC5sZW5iaXRzPTcsTD17Yml0czpoLmxlbmJpdHN9LEg9bCgwLGgubGVucywwLDE5LGgubGVuY29kZSwwLGgud29yayxMKSxoLmxlbmJpdHM9TC5iaXRzLEgpe3YubXNnPSJpbnZhbGlkIGNvZGUgbGVuZ3RocyBzZXQiLGgubW9kZT0zMDticmVha31oLmhhdmU9MCxoLm1vZGU9MTk7Y2FzZSAxOTpmb3IoO2guaGF2ZTxoLm5sZW4raC5uZGlzdDspe2Zvcig7d2U9KFM9aC5sZW5jb2RlW0YmKDE8PGgubGVuYml0cyktMV0pPj4+MTYmMjU1LFZlPTY1NTM1JlMsISgoU2U9Uz4+PjI0KTw9VCk7KXtpZihVPT09MClicmVhayBlO1UtLSxGKz1HW0srK108PFQsVCs9OH1pZihWZTwxNilGPj4+PVNlLFQtPVNlLGgubGVuc1toLmhhdmUrK109VmU7ZWxzZXtpZihWZT09PTE2KXtmb3IoeT1TZSsyO1Q8eTspe2lmKFU9PT0wKWJyZWFrIGU7VS0tLEYrPUdbSysrXTw8VCxUKz04fWlmKEY+Pj49U2UsVC09U2UsaC5oYXZlPT09MCl7di5tc2c9ImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiLGgubW9kZT0zMDticmVha31jPWgubGVuc1toLmhhdmUtMV0saj0zKygzJkYpLEY+Pj49MixULT0yfWVsc2UgaWYoVmU9PT0xNyl7Zm9yKHk9U2UrMztUPHk7KXtpZihVPT09MClicmVhayBlO1UtLSxGKz1HW0srK108PFQsVCs9OH1ULT1TZSxjPTAsaj0zKyg3JihGPj4+PVNlKSksRj4+Pj0zLFQtPTN9ZWxzZXtmb3IoeT1TZSs3O1Q8eTspe2lmKFU9PT0wKWJyZWFrIGU7VS0tLEYrPUdbSysrXTw8VCxUKz04fVQtPVNlLGM9MCxqPTExKygxMjcmKEY+Pj49U2UpKSxGPj4+PTcsVC09N31pZihoLmhhdmUraj5oLm5sZW4raC5uZGlzdCl7di5tc2c9ImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiLGgubW9kZT0zMDticmVha31mb3IoO2otLTspaC5sZW5zW2guaGF2ZSsrXT1jfX1pZihoLm1vZGU9PT0zMClicmVhaztpZihoLmxlbnNbMjU2XT09PTApe3YubXNnPSJpbnZhbGlkIGNvZGUgLS0gbWlzc2luZyBlbmQtb2YtYmxvY2siLGgubW9kZT0zMDticmVha31pZihoLmxlbmJpdHM9OSxMPXtiaXRzOmgubGVuYml0c30sSD1sKEEsaC5sZW5zLDAsaC5ubGVuLGgubGVuY29kZSwwLGgud29yayxMKSxoLmxlbmJpdHM9TC5iaXRzLEgpe3YubXNnPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RocyBzZXQiLGgubW9kZT0zMDticmVha31pZihoLmRpc3RiaXRzPTYsaC5kaXN0Y29kZT1oLmRpc3RkeW4sTD17Yml0czpoLmRpc3RiaXRzfSxIPWwoZCxoLmxlbnMsaC5ubGVuLGgubmRpc3QsaC5kaXN0Y29kZSwwLGgud29yayxMKSxoLmRpc3RiaXRzPUwuYml0cyxIKXt2Lm1zZz0iaW52YWxpZCBkaXN0YW5jZXMgc2V0IixoLm1vZGU9MzA7YnJlYWt9aWYoaC5tb2RlPTIwLFA9PT02KWJyZWFrIGU7Y2FzZSAyMDpoLm1vZGU9MjE7Y2FzZSAyMTppZig2PD1VJiYyNTg8PXNlKXt2Lm5leHRfb3V0PUFlLHYuYXZhaWxfb3V0PXNlLHYubmV4dF9pbj1LLHYuYXZhaWxfaW49VSxoLmhvbGQ9RixoLmJpdHM9VCx1KHYsdGUpLEFlPXYubmV4dF9vdXQsaGU9di5vdXRwdXQsc2U9di5hdmFpbF9vdXQsSz12Lm5leHRfaW4sRz12LmlucHV0LFU9di5hdmFpbF9pbixGPWguaG9sZCxUPWguYml0cyxoLm1vZGU9PT0xMiYmKGguYmFjaz0tMSk7YnJlYWt9Zm9yKGguYmFjaz0wO3dlPShTPWgubGVuY29kZVtGJigxPDxoLmxlbmJpdHMpLTFdKT4+PjE2JjI1NSxWZT02NTUzNSZTLCEoKFNlPVM+Pj4yNCk8PVQpOyl7aWYoVT09PTApYnJlYWsgZTtVLS0sRis9R1tLKytdPDxULFQrPTh9aWYod2UmJiEoMjQwJndlKSl7Zm9yKFBlPVNlLFB0PXdlLGt0PVZlO3dlPShTPWgubGVuY29kZVtrdCsoKEYmKDE8PFBlK1B0KS0xKT4+UGUpXSk+Pj4xNiYyNTUsVmU9NjU1MzUmUywhKFBlKyhTZT1TPj4+MjQpPD1UKTspe2lmKFU9PT0wKWJyZWFrIGU7VS0tLEYrPUdbSysrXTw8VCxUKz04fUY+Pj49UGUsVC09UGUsaC5iYWNrKz1QZX1pZihGPj4+PVNlLFQtPVNlLGguYmFjays9U2UsaC5sZW5ndGg9VmUsd2U9PT0wKXtoLm1vZGU9MjY7YnJlYWt9aWYoMzImd2Upe2guYmFjaz0tMSxoLm1vZGU9MTI7YnJlYWt9aWYoNjQmd2Upe3YubXNnPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUiLGgubW9kZT0zMDticmVha31oLmV4dHJhPTE1JndlLGgubW9kZT0yMjtjYXNlIDIyOmlmKGguZXh0cmEpe2Zvcih5PWguZXh0cmE7VDx5Oyl7aWYoVT09PTApYnJlYWsgZTtVLS0sRis9R1tLKytdPDxULFQrPTh9aC5sZW5ndGgrPUYmKDE8PGguZXh0cmEpLTEsRj4+Pj1oLmV4dHJhLFQtPWguZXh0cmEsaC5iYWNrKz1oLmV4dHJhfWgud2FzPWgubGVuZ3RoLGgubW9kZT0yMztjYXNlIDIzOmZvcig7d2U9KFM9aC5kaXN0Y29kZVtGJigxPDxoLmRpc3RiaXRzKS0xXSk+Pj4xNiYyNTUsVmU9NjU1MzUmUywhKChTZT1TPj4+MjQpPD1UKTspe2lmKFU9PT0wKWJyZWFrIGU7VS0tLEYrPUdbSysrXTw8VCxUKz04fWlmKCEoMjQwJndlKSl7Zm9yKFBlPVNlLFB0PXdlLGt0PVZlO3dlPShTPWguZGlzdGNvZGVba3QrKChGJigxPDxQZStQdCktMSk+PlBlKV0pPj4+MTYmMjU1LFZlPTY1NTM1JlMsIShQZSsoU2U9Uz4+PjI0KTw9VCk7KXtpZihVPT09MClicmVhayBlO1UtLSxGKz1HW0srK108PFQsVCs9OH1GPj4+PVBlLFQtPVBlLGguYmFjays9UGV9aWYoRj4+Pj1TZSxULT1TZSxoLmJhY2srPVNlLDY0JndlKXt2Lm1zZz0iaW52YWxpZCBkaXN0YW5jZSBjb2RlIixoLm1vZGU9MzA7YnJlYWt9aC5vZmZzZXQ9VmUsaC5leHRyYT0xNSZ3ZSxoLm1vZGU9MjQ7Y2FzZSAyNDppZihoLmV4dHJhKXtmb3IoeT1oLmV4dHJhO1Q8eTspe2lmKFU9PT0wKWJyZWFrIGU7VS0tLEYrPUdbSysrXTw8VCxUKz04fWgub2Zmc2V0Kz1GJigxPDxoLmV4dHJhKS0xLEY+Pj49aC5leHRyYSxULT1oLmV4dHJhLGguYmFjays9aC5leHRyYX1pZihoLm9mZnNldD5oLmRtYXgpe3YubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsaC5tb2RlPTMwO2JyZWFrfWgubW9kZT0yNTtjYXNlIDI1OmlmKHNlPT09MClicmVhayBlO2lmKGo9dGUtc2UsaC5vZmZzZXQ+ail7aWYoKGo9aC5vZmZzZXQtaik+aC53aGF2ZSYmaC5zYW5lKXt2Lm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLGgubW9kZT0zMDticmVha31MZT1qPmgud25leHQ/KGotPWgud25leHQsaC53c2l6ZS1qKTpoLnduZXh0LWosaj5oLmxlbmd0aCYmKGo9aC5sZW5ndGgpLCRlPWgud2luZG93fWVsc2UgJGU9aGUsTGU9QWUtaC5vZmZzZXQsaj1oLmxlbmd0aDtmb3Ioc2U8aiYmKGo9c2UpLHNlLT1qLGgubGVuZ3RoLT1qO2hlW0FlKytdPSRlW0xlKytdLC0tajspO2gubGVuZ3RoPT09MCYmKGgubW9kZT0yMSk7YnJlYWs7Y2FzZSAyNjppZihzZT09PTApYnJlYWsgZTtoZVtBZSsrXT1oLmxlbmd0aCxzZS0tLGgubW9kZT0yMTticmVhaztjYXNlIDI3OmlmKGgud3JhcCl7Zm9yKDtUPDMyOyl7aWYoVT09PTApYnJlYWsgZTtVLS0sRnw9R1tLKytdPDxULFQrPTh9aWYodGUtPXNlLHYudG90YWxfb3V0Kz10ZSxoLnRvdGFsKz10ZSx0ZSYmKHYuYWRsZXI9aC5jaGVjaz1oLmZsYWdzP28oaC5jaGVjayxoZSx0ZSxBZS10ZSk6YShoLmNoZWNrLGhlLHRlLEFlLXRlKSksdGU9c2UsKGguZmxhZ3M/RjptKEYpKSE9PWguY2hlY2spe3YubXNnPSJpbmNvcnJlY3QgZGF0YSBjaGVjayIsaC5tb2RlPTMwO2JyZWFrfVQ9Rj0wfWgubW9kZT0yODtjYXNlIDI4OmlmKGgud3JhcCYmaC5mbGFncyl7Zm9yKDtUPDMyOyl7aWYoVT09PTApYnJlYWsgZTtVLS0sRis9R1tLKytdPDxULFQrPTh9aWYoRiE9PSg0Mjk0OTY3Mjk1JmgudG90YWwpKXt2Lm1zZz0iaW5jb3JyZWN0IGxlbmd0aCBjaGVjayIsaC5tb2RlPTMwO2JyZWFrfVQ9Rj0wfWgubW9kZT0yOTtjYXNlIDI5Okg9MTticmVhayBlO2Nhc2UgMzA6SD0tMzticmVhayBlO2Nhc2UgMzE6cmV0dXJuLTQ7Y2FzZSAzMjpkZWZhdWx0OnJldHVybiBmfXJldHVybiB2Lm5leHRfb3V0PUFlLHYuYXZhaWxfb3V0PXNlLHYubmV4dF9pbj1LLHYuYXZhaWxfaW49VSxoLmhvbGQ9RixoLmJpdHM9VCwoaC53c2l6ZXx8dGUhPT12LmF2YWlsX291dCYmaC5tb2RlPDMwJiYoaC5tb2RlPDI3fHxQIT09NCkpJiZYKHYsdi5vdXRwdXQsdi5uZXh0X291dCx0ZS12LmF2YWlsX291dCk/KGgubW9kZT0zMSwtNCk6KHVlLT12LmF2YWlsX2luLHRlLT12LmF2YWlsX291dCx2LnRvdGFsX2luKz11ZSx2LnRvdGFsX291dCs9dGUsaC50b3RhbCs9dGUsaC53cmFwJiZ0ZSYmKHYuYWRsZXI9aC5jaGVjaz1oLmZsYWdzP28oaC5jaGVjayxoZSx0ZSx2Lm5leHRfb3V0LXRlKTphKGguY2hlY2ssaGUsdGUsdi5uZXh0X291dC10ZSkpLHYuZGF0YV90eXBlPWguYml0cysoaC5sYXN0PzY0OjApKyhoLm1vZGU9PT0xMj8xMjg6MCkrKGgubW9kZT09PTIwfHxoLm1vZGU9PT0xNT8yNTY6MCksKHVlPT0wJiZ0ZT09PTB8fFA9PT00KSYmSD09PWcmJihIPS01KSxIKX0scy5pbmZsYXRlRW5kPWZ1bmN0aW9uKHYpe2lmKCF2fHwhdi5zdGF0ZSlyZXR1cm4gZjt2YXIgUD12LnN0YXRlO3JldHVybiBQLndpbmRvdyYmKFAud2luZG93PW51bGwpLHYuc3RhdGU9bnVsbCxnfSxzLmluZmxhdGVHZXRIZWFkZXI9ZnVuY3Rpb24odixQKXt2YXIgaDtyZXR1cm4gdiYmdi5zdGF0ZSYmMiYoaD12LnN0YXRlKS53cmFwPygoaC5oZWFkPVApLmRvbmU9ITEsZyk6Zn0scy5pbmZsYXRlU2V0RGljdGlvbmFyeT1mdW5jdGlvbih2LFApe3ZhciBoLEc9UC5sZW5ndGg7cmV0dXJuIHYmJnYuc3RhdGU/KGg9di5zdGF0ZSkud3JhcCE9PTAmJmgubW9kZSE9PTExP2Y6aC5tb2RlPT09MTEmJmEoMSxQLEcsMCkhPT1oLmNoZWNrPy0zOlgodixQLEcsRyk/KGgubW9kZT0zMSwtNCk6KGguaGF2ZWRpY3Q9MSxnKTpmfSxzLmluZmxhdGVJbmZvPSJwYWtvIGluZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpIn0seyIuLi91dGlscy9jb21tb24iOjQxLCIuL2FkbGVyMzIiOjQzLCIuL2NyYzMyIjo0NSwiLi9pbmZmYXN0Ijo0OCwiLi9pbmZ0cmVlcyI6NTB9XSw1MDpbZnVuY3Rpb24odCxuLHMpe3ZhciBpPXQoIi4uL3V0aWxzL2NvbW1vbiIpLGE9WzMsNCw1LDYsNyw4LDksMTAsMTEsMTMsMTUsMTcsMTksMjMsMjcsMzEsMzUsNDMsNTEsNTksNjcsODMsOTksMTE1LDEzMSwxNjMsMTk1LDIyNywyNTgsMCwwXSxvPVsxNiwxNiwxNiwxNiwxNiwxNiwxNiwxNiwxNywxNywxNywxNywxOCwxOCwxOCwxOCwxOSwxOSwxOSwxOSwyMCwyMCwyMCwyMCwyMSwyMSwyMSwyMSwxNiw3Miw3OF0sdT1bMSwyLDMsNCw1LDcsOSwxMywxNywyNSwzMyw0OSw2NSw5NywxMjksMTkzLDI1NywzODUsNTEzLDc2OSwxMDI1LDE1MzcsMjA0OSwzMDczLDQwOTcsNjE0NSw4MTkzLDEyMjg5LDE2Mzg1LDI0NTc3LDAsMF0sbD1bMTYsMTYsMTYsMTYsMTcsMTcsMTgsMTgsMTksMTksMjAsMjAsMjEsMjEsMjIsMjIsMjMsMjMsMjQsMjQsMjUsMjUsMjYsMjYsMjcsMjcsMjgsMjgsMjksMjksNjQsNjRdO24uZXhwb3J0cz1mdW5jdGlvbihBLGQsZyxmLEMscCxiLG0pe3ZhciBFLHcsTixJLFIsTSxXLE8sVixYPW0uYml0cyx2PTAsUD0wLGg9MCxHPTAsaGU9MCxLPTAsQWU9MCxVPTAsc2U9MCxGPTAsVD1udWxsLHVlPTAsdGU9bmV3IGkuQnVmMTYoMTYpLGo9bmV3IGkuQnVmMTYoMTYpLExlPW51bGwsJGU9MDtmb3Iodj0wO3Y8PTE1O3YrKyl0ZVt2XT0wO2ZvcihQPTA7UDxmO1ArKyl0ZVtkW2crUF1dKys7Zm9yKGhlPVgsRz0xNTsxPD1HJiZ0ZVtHXT09PTA7Ry0tKTtpZihHPGhlJiYoaGU9RyksRz09PTApcmV0dXJuIENbcCsrXT0yMDk3MTUyMCxDW3ArK109MjA5NzE1MjAsbS5iaXRzPTEsMDtmb3IoaD0xO2g8RyYmdGVbaF09PT0wO2grKyk7Zm9yKGhlPGgmJihoZT1oKSx2PVU9MTt2PD0xNTt2KyspaWYoVTw8PTEsKFUtPXRlW3ZdKTwwKXJldHVybi0xO2lmKDA8VSYmKEE9PT0wfHxHIT09MSkpcmV0dXJuLTE7Zm9yKGpbMV09MCx2PTE7djwxNTt2Kyspalt2KzFdPWpbdl0rdGVbdl07Zm9yKFA9MDtQPGY7UCsrKWRbZytQXSE9PTAmJihiW2pbZFtnK1BdXSsrXT1QKTtpZihNPUE9PT0wPyhUPUxlPWIsMTkpOkE9PT0xPyhUPWEsdWUtPTI1NyxMZT1vLCRlLT0yNTcsMjU2KTooVD11LExlPWwsLTEpLHY9aCxSPXAsQWU9UD1GPTAsTj0tMSxJPShzZT0xPDwoSz1oZSkpLTEsQT09PTEmJjg1MjxzZXx8QT09PTImJjU5MjxzZSlyZXR1cm4gMTtmb3IoOzspe2ZvcihXPXYtQWUsVj1iW1BdPE0/KE89MCxiW1BdKTpiW1BdPk0/KE89TGVbJGUrYltQXV0sVFt1ZStiW1BdXSk6KE89OTYsMCksRT0xPDx2LUFlLGg9dz0xPDxLO0NbUisoRj4+QWUpKyh3LT1FKV09Vzw8MjR8Tzw8MTZ8VnwwLHchPT0wOyk7Zm9yKEU9MTw8di0xO0YmRTspRT4+PTE7aWYoRSE9PTA/KEYmPUUtMSxGKz1FKTpGPTAsUCsrLC0tdGVbdl09PTApe2lmKHY9PT1HKWJyZWFrO3Y9ZFtnK2JbUF1dfWlmKGhlPHYmJihGJkkpIT09Til7Zm9yKEFlPT09MCYmKEFlPWhlKSxSKz1oLFU9MTw8KEs9di1BZSk7SytBZTxHJiYhKChVLT10ZVtLK0FlXSk8PTApOylLKyssVTw8PTE7aWYoc2UrPTE8PEssQT09PTEmJjg1MjxzZXx8QT09PTImJjU5MjxzZSlyZXR1cm4gMTtDW049RiZJXT1oZTw8MjR8Szw8MTZ8Ui1wfDB9fXJldHVybiBGIT09MCYmKENbUitGXT12LUFlPDwyNHw2NDw8MTZ8MCksbS5iaXRzPWhlLDB9fSx7Ii4uL3V0aWxzL2NvbW1vbiI6NDF9XSw1MTpbZnVuY3Rpb24odCxuLHMpe24uZXhwb3J0cz17MjoibmVlZCBkaWN0aW9uYXJ5IiwxOiJzdHJlYW0gZW5kIiwwOiIiLCItMSI6ImZpbGUgZXJyb3IiLCItMiI6InN0cmVhbSBlcnJvciIsIi0zIjoiZGF0YSBlcnJvciIsIi00IjoiaW5zdWZmaWNpZW50IG1lbW9yeSIsIi01IjoiYnVmZmVyIGVycm9yIiwiLTYiOiJpbmNvbXBhdGlibGUgdmVyc2lvbiJ9fSx7fV0sNTI6W2Z1bmN0aW9uKHQsbixzKXt2YXIgaT10KCIuLi91dGlscy9jb21tb24iKSxhPTAsbz0xO2Z1bmN0aW9uIHUoUyl7Zm9yKHZhciBrPVMubGVuZ3RoOzA8PS0tazspU1trXT0wfXZhciBsPTAsQT0yOSxkPTI1NixnPWQrMStBLGY9MzAsQz0xOSxwPTIqZysxLGI9MTUsbT0xNixFPTcsdz0yNTYsTj0xNixJPTE3LFI9MTgsTT1bMCwwLDAsMCwwLDAsMCwwLDEsMSwxLDEsMiwyLDIsMiwzLDMsMywzLDQsNCw0LDQsNSw1LDUsNSwwXSxXPVswLDAsMCwwLDEsMSwyLDIsMywzLDQsNCw1LDUsNiw2LDcsNyw4LDgsOSw5LDEwLDEwLDExLDExLDEyLDEyLDEzLDEzXSxPPVswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMyw3XSxWPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSxYPW5ldyBBcnJheSgyKihnKzIpKTt1KFgpO3ZhciB2PW5ldyBBcnJheSgyKmYpO3Uodik7dmFyIFA9bmV3IEFycmF5KDUxMik7dShQKTt2YXIgaD1uZXcgQXJyYXkoMjU2KTt1KGgpO3ZhciBHPW5ldyBBcnJheShBKTt1KEcpO3ZhciBoZSxLLEFlLFU9bmV3IEFycmF5KGYpO2Z1bmN0aW9uIHNlKFMsayxRLFkseCl7dGhpcy5zdGF0aWNfdHJlZT1TLHRoaXMuZXh0cmFfYml0cz1rLHRoaXMuZXh0cmFfYmFzZT1RLHRoaXMuZWxlbXM9WSx0aGlzLm1heF9sZW5ndGg9eCx0aGlzLmhhc19zdHJlZT1TJiZTLmxlbmd0aH1mdW5jdGlvbiBGKFMsayl7dGhpcy5keW5fdHJlZT1TLHRoaXMubWF4X2NvZGU9MCx0aGlzLnN0YXRfZGVzYz1rfWZ1bmN0aW9uIFQoUyl7cmV0dXJuIFM8MjU2P1BbU106UFsyNTYrKFM+Pj43KV19ZnVuY3Rpb24gdWUoUyxrKXtTLnBlbmRpbmdfYnVmW1MucGVuZGluZysrXT0yNTUmayxTLnBlbmRpbmdfYnVmW1MucGVuZGluZysrXT1rPj4+OCYyNTV9ZnVuY3Rpb24gdGUoUyxrLFEpe1MuYmlfdmFsaWQ+bS1RPyhTLmJpX2J1Znw9azw8Uy5iaV92YWxpZCY2NTUzNSx1ZShTLFMuYmlfYnVmKSxTLmJpX2J1Zj1rPj5tLVMuYmlfdmFsaWQsUy5iaV92YWxpZCs9US1tKTooUy5iaV9idWZ8PWs8PFMuYmlfdmFsaWQmNjU1MzUsUy5iaV92YWxpZCs9USl9ZnVuY3Rpb24gaihTLGssUSl7dGUoUyxRWzIqa10sUVsyKmsrMV0pfWZ1bmN0aW9uIExlKFMsayl7Zm9yKHZhciBRPTA7UXw9MSZTLFM+Pj49MSxRPDw9MSwwPC0tazspO3JldHVybiBRPj4+MX1mdW5jdGlvbiAkZShTLGssUSl7dmFyIFkseCxKPW5ldyBBcnJheShiKzEpLHJlPTA7Zm9yKFk9MTtZPD1iO1krKylKW1ldPXJlPXJlK1FbWS0xXTw8MTtmb3IoeD0wO3g8PWs7eCsrKXt2YXIgcT1TWzIqeCsxXTtxIT09MCYmKFNbMip4XT1MZShKW3FdKysscSkpfX1mdW5jdGlvbiBTZShTKXt2YXIgaztmb3Ioaz0wO2s8ZztrKyspUy5keW5fbHRyZWVbMiprXT0wO2ZvcihrPTA7azxmO2srKylTLmR5bl9kdHJlZVsyKmtdPTA7Zm9yKGs9MDtrPEM7aysrKVMuYmxfdHJlZVsyKmtdPTA7Uy5keW5fbHRyZWVbMip3XT0xLFMub3B0X2xlbj1TLnN0YXRpY19sZW49MCxTLmxhc3RfbGl0PVMubWF0Y2hlcz0wfWZ1bmN0aW9uIHdlKFMpezg8Uy5iaV92YWxpZD91ZShTLFMuYmlfYnVmKTowPFMuYmlfdmFsaWQmJihTLnBlbmRpbmdfYnVmW1MucGVuZGluZysrXT1TLmJpX2J1ZiksUy5iaV9idWY9MCxTLmJpX3ZhbGlkPTB9ZnVuY3Rpb24gVmUoUyxrLFEsWSl7dmFyIHg9MiprLEo9MipRO3JldHVybiBTW3hdPFNbSl18fFNbeF09PT1TW0pdJiZZW2tdPD1ZW1FdfWZ1bmN0aW9uIFBlKFMsayxRKXtmb3IodmFyIFk9Uy5oZWFwW1FdLHg9UTw8MTt4PD1TLmhlYXBfbGVuJiYoeDxTLmhlYXBfbGVuJiZWZShrLFMuaGVhcFt4KzFdLFMuaGVhcFt4XSxTLmRlcHRoKSYmeCsrLCFWZShrLFksUy5oZWFwW3hdLFMuZGVwdGgpKTspUy5oZWFwW1FdPVMuaGVhcFt4XSxRPXgseDw8PTE7Uy5oZWFwW1FdPVl9ZnVuY3Rpb24gUHQoUyxrLFEpe3ZhciBZLHgsSixyZSxxPTA7aWYoUy5sYXN0X2xpdCE9PTApZm9yKDtZPVMucGVuZGluZ19idWZbUy5kX2J1ZisyKnFdPDw4fFMucGVuZGluZ19idWZbUy5kX2J1ZisyKnErMV0seD1TLnBlbmRpbmdfYnVmW1MubF9idWYrcV0scSsrLFk9PT0wP2ooUyx4LGspOihqKFMsKEo9aFt4XSkrZCsxLGspLChyZT1NW0pdKSE9PTAmJnRlKFMseC09R1tKXSxyZSksaihTLEo9VCgtLVkpLFEpLChyZT1XW0pdKSE9PTAmJnRlKFMsWS09VVtKXSxyZSkpLHE8Uy5sYXN0X2xpdDspO2ooUyx3LGspfWZ1bmN0aW9uIGt0KFMsayl7dmFyIFEsWSx4LEo9ay5keW5fdHJlZSxyZT1rLnN0YXRfZGVzYy5zdGF0aWNfdHJlZSxxPWsuc3RhdF9kZXNjLmhhc19zdHJlZSxvZT1rLnN0YXRfZGVzYy5lbGVtcyx4ZT0tMTtmb3IoUy5oZWFwX2xlbj0wLFMuaGVhcF9tYXg9cCxRPTA7UTxvZTtRKyspSlsyKlFdIT09MD8oUy5oZWFwWysrUy5oZWFwX2xlbl09eGU9USxTLmRlcHRoW1FdPTApOkpbMipRKzFdPTA7Zm9yKDtTLmhlYXBfbGVuPDI7KUpbMiooeD1TLmhlYXBbKytTLmhlYXBfbGVuXT14ZTwyPysreGU6MCldPTEsUy5kZXB0aFt4XT0wLFMub3B0X2xlbi0tLHEmJihTLnN0YXRpY19sZW4tPXJlWzIqeCsxXSk7Zm9yKGsubWF4X2NvZGU9eGUsUT1TLmhlYXBfbGVuPj4xOzE8PVE7US0tKVBlKFMsSixRKTtmb3IoeD1vZTtRPVMuaGVhcFsxXSxTLmhlYXBbMV09Uy5oZWFwW1MuaGVhcF9sZW4tLV0sUGUoUyxKLDEpLFk9Uy5oZWFwWzFdLFMuaGVhcFstLVMuaGVhcF9tYXhdPVEsUy5oZWFwWy0tUy5oZWFwX21heF09WSxKWzIqeF09SlsyKlFdK0pbMipZXSxTLmRlcHRoW3hdPShTLmRlcHRoW1FdPj1TLmRlcHRoW1ldP1MuZGVwdGhbUV06Uy5kZXB0aFtZXSkrMSxKWzIqUSsxXT1KWzIqWSsxXT14LFMuaGVhcFsxXT14KyssUGUoUyxKLDEpLDI8PVMuaGVhcF9sZW47KTtTLmhlYXBbLS1TLmhlYXBfbWF4XT1TLmhlYXBbMV0sZnVuY3Rpb24oRWUsRXQpe3ZhciBVbixVdCxHbixVZSxxcyxZYSxxdD1FdC5keW5fdHJlZSxJaD1FdC5tYXhfY29kZSxMYj1FdC5zdGF0X2Rlc2Muc3RhdGljX3RyZWUsUGI9RXQuc3RhdF9kZXNjLmhhc19zdHJlZSxVYj1FdC5zdGF0X2Rlc2MuZXh0cmFfYml0cyxOaD1FdC5zdGF0X2Rlc2MuZXh0cmFfYmFzZSxIbj1FdC5zdGF0X2Rlc2MubWF4X2xlbmd0aCxqcz0wO2ZvcihVZT0wO1VlPD1iO1VlKyspRWUuYmxfY291bnRbVWVdPTA7Zm9yKHF0WzIqRWUuaGVhcFtFZS5oZWFwX21heF0rMV09MCxVbj1FZS5oZWFwX21heCsxO1VuPHA7VW4rKylIbjwoVWU9cXRbMipxdFsyKihVdD1FZS5oZWFwW1VuXSkrMV0rMV0rMSkmJihVZT1IbixqcysrKSxxdFsyKlV0KzFdPVVlLEloPFV0fHwoRWUuYmxfY291bnRbVWVdKysscXM9MCxOaDw9VXQmJihxcz1VYltVdC1OaF0pLFlhPXF0WzIqVXRdLEVlLm9wdF9sZW4rPVlhKihVZStxcyksUGImJihFZS5zdGF0aWNfbGVuKz1ZYSooTGJbMipVdCsxXStxcykpKTtpZihqcyE9PTApe2Rve2ZvcihVZT1Ibi0xO0VlLmJsX2NvdW50W1VlXT09PTA7KVVlLS07RWUuYmxfY291bnRbVWVdLS0sRWUuYmxfY291bnRbVWUrMV0rPTIsRWUuYmxfY291bnRbSG5dLS0sanMtPTJ9d2hpbGUoMDxqcyk7Zm9yKFVlPUhuO1VlIT09MDtVZS0tKWZvcihVdD1FZS5ibF9jb3VudFtVZV07VXQhPT0wOylJaDwoR249RWUuaGVhcFstLVVuXSl8fChxdFsyKkduKzFdIT09VWUmJihFZS5vcHRfbGVuKz0oVWUtcXRbMipHbisxXSkqcXRbMipHbl0scXRbMipHbisxXT1VZSksVXQtLSl9fShTLGspLCRlKEoseGUsUy5ibF9jb3VudCl9ZnVuY3Rpb24gYyhTLGssUSl7dmFyIFkseCxKPS0xLHJlPWtbMV0scT0wLG9lPTcseGU9NDtmb3IocmU9PT0wJiYob2U9MTM4LHhlPTMpLGtbMiooUSsxKSsxXT02NTUzNSxZPTA7WTw9UTtZKyspeD1yZSxyZT1rWzIqKFkrMSkrMV0sKytxPG9lJiZ4PT09cmV8fChxPHhlP1MuYmxfdHJlZVsyKnhdKz1xOnghPT0wPyh4IT09SiYmUy5ibF90cmVlWzIqeF0rKyxTLmJsX3RyZWVbMipOXSsrKTpxPD0xMD9TLmJsX3RyZWVbMipJXSsrOlMuYmxfdHJlZVsyKlJdKyssSj14LHhlPShxPTApPT09cmU/KG9lPTEzOCwzKTp4PT09cmU/KG9lPTYsMyk6KG9lPTcsNCkpfWZ1bmN0aW9uIEgoUyxrLFEpe3ZhciBZLHgsSj0tMSxyZT1rWzFdLHE9MCxvZT03LHhlPTQ7Zm9yKHJlPT09MCYmKG9lPTEzOCx4ZT0zKSxZPTA7WTw9UTtZKyspaWYoeD1yZSxyZT1rWzIqKFkrMSkrMV0sISgrK3E8b2UmJng9PT1yZSkpe2lmKHE8eGUpZm9yKDtqKFMseCxTLmJsX3RyZWUpLC0tcSE9MDspO2Vsc2UgeCE9PTA/KHghPT1KJiYoaihTLHgsUy5ibF90cmVlKSxxLS0pLGooUyxOLFMuYmxfdHJlZSksdGUoUyxxLTMsMikpOnE8PTEwPyhqKFMsSSxTLmJsX3RyZWUpLHRlKFMscS0zLDMpKTooaihTLFIsUy5ibF90cmVlKSx0ZShTLHEtMTEsNykpO0o9eCx4ZT0ocT0wKT09PXJlPyhvZT0xMzgsMyk6eD09PXJlPyhvZT02LDMpOihvZT03LDQpfX11KFUpO3ZhciBMPSExO2Z1bmN0aW9uIHkoUyxrLFEsWSl7dGUoUywobDw8MSkrKFk/MTowKSwzKSxmdW5jdGlvbih4LEoscmUscSl7d2UoeCkscSYmKHVlKHgscmUpLHVlKHgsfnJlKSksaS5hcnJheVNldCh4LnBlbmRpbmdfYnVmLHgud2luZG93LEoscmUseC5wZW5kaW5nKSx4LnBlbmRpbmcrPXJlfShTLGssUSwhMCl9cy5fdHJfaW5pdD1mdW5jdGlvbihTKXtMfHwoZnVuY3Rpb24oKXt2YXIgayxRLFkseCxKLHJlPW5ldyBBcnJheShiKzEpO2Zvcih4PVk9MDt4PEEtMTt4KyspZm9yKEdbeF09WSxrPTA7azwxPDxNW3hdO2srKyloW1krK109eDtmb3IoaFtZLTFdPXgseD1KPTA7eDwxNjt4KyspZm9yKFVbeF09SixrPTA7azwxPDxXW3hdO2srKylQW0orK109eDtmb3IoSj4+PTc7eDxmO3grKylmb3IoVVt4XT1KPDw3LGs9MDtrPDE8PFdbeF0tNztrKyspUFsyNTYrSisrXT14O2ZvcihRPTA7UTw9YjtRKyspcmVbUV09MDtmb3Ioaz0wO2s8PTE0MzspWFsyKmsrMV09OCxrKysscmVbOF0rKztmb3IoO2s8PTI1NTspWFsyKmsrMV09OSxrKysscmVbOV0rKztmb3IoO2s8PTI3OTspWFsyKmsrMV09NyxrKysscmVbN10rKztmb3IoO2s8PTI4NzspWFsyKmsrMV09OCxrKysscmVbOF0rKztmb3IoJGUoWCxnKzEscmUpLGs9MDtrPGY7aysrKXZbMiprKzFdPTUsdlsyKmtdPUxlKGssNSk7aGU9bmV3IHNlKFgsTSxkKzEsZyxiKSxLPW5ldyBzZSh2LFcsMCxmLGIpLEFlPW5ldyBzZShuZXcgQXJyYXkoMCksTywwLEMsRSl9KCksTD0hMCksUy5sX2Rlc2M9bmV3IEYoUy5keW5fbHRyZWUsaGUpLFMuZF9kZXNjPW5ldyBGKFMuZHluX2R0cmVlLEspLFMuYmxfZGVzYz1uZXcgRihTLmJsX3RyZWUsQWUpLFMuYmlfYnVmPTAsUy5iaV92YWxpZD0wLFNlKFMpfSxzLl90cl9zdG9yZWRfYmxvY2s9eSxzLl90cl9mbHVzaF9ibG9jaz1mdW5jdGlvbihTLGssUSxZKXt2YXIgeCxKLHJlPTA7MDxTLmxldmVsPyhTLnN0cm0uZGF0YV90eXBlPT09MiYmKFMuc3RybS5kYXRhX3R5cGU9ZnVuY3Rpb24ocSl7dmFyIG9lLHhlPTQwOTM2MjQ0NDc7Zm9yKG9lPTA7b2U8PTMxO29lKysseGU+Pj49MSlpZigxJnhlJiZxLmR5bl9sdHJlZVsyKm9lXSE9PTApcmV0dXJuIGE7aWYocS5keW5fbHRyZWVbMThdIT09MHx8cS5keW5fbHRyZWVbMjBdIT09MHx8cS5keW5fbHRyZWVbMjZdIT09MClyZXR1cm4gbztmb3Iob2U9MzI7b2U8ZDtvZSsrKWlmKHEuZHluX2x0cmVlWzIqb2VdIT09MClyZXR1cm4gbztyZXR1cm4gYX0oUykpLGt0KFMsUy5sX2Rlc2MpLGt0KFMsUy5kX2Rlc2MpLHJlPWZ1bmN0aW9uKHEpe3ZhciBvZTtmb3IoYyhxLHEuZHluX2x0cmVlLHEubF9kZXNjLm1heF9jb2RlKSxjKHEscS5keW5fZHRyZWUscS5kX2Rlc2MubWF4X2NvZGUpLGt0KHEscS5ibF9kZXNjKSxvZT1DLTE7Mzw9b2UmJnEuYmxfdHJlZVsyKlZbb2VdKzFdPT09MDtvZS0tKTtyZXR1cm4gcS5vcHRfbGVuKz0zKihvZSsxKSs1KzUrNCxvZX0oUykseD1TLm9wdF9sZW4rMys3Pj4+MywoSj1TLnN0YXRpY19sZW4rMys3Pj4+Myk8PXgmJih4PUopKTp4PUo9USs1LFErNDw9eCYmayE9PS0xP3koUyxrLFEsWSk6Uy5zdHJhdGVneT09PTR8fEo9PT14Pyh0ZShTLDIrKFk/MTowKSwzKSxQdChTLFgsdikpOih0ZShTLDQrKFk/MTowKSwzKSxmdW5jdGlvbihxLG9lLHhlLEVlKXt2YXIgRXQ7Zm9yKHRlKHEsb2UtMjU3LDUpLHRlKHEseGUtMSw1KSx0ZShxLEVlLTQsNCksRXQ9MDtFdDxFZTtFdCsrKXRlKHEscS5ibF90cmVlWzIqVltFdF0rMV0sMyk7SChxLHEuZHluX2x0cmVlLG9lLTEpLEgocSxxLmR5bl9kdHJlZSx4ZS0xKX0oUyxTLmxfZGVzYy5tYXhfY29kZSsxLFMuZF9kZXNjLm1heF9jb2RlKzEscmUrMSksUHQoUyxTLmR5bl9sdHJlZSxTLmR5bl9kdHJlZSkpLFNlKFMpLFkmJndlKFMpfSxzLl90cl90YWxseT1mdW5jdGlvbihTLGssUSl7cmV0dXJuIFMucGVuZGluZ19idWZbUy5kX2J1ZisyKlMubGFzdF9saXRdPWs+Pj44JjI1NSxTLnBlbmRpbmdfYnVmW1MuZF9idWYrMipTLmxhc3RfbGl0KzFdPTI1NSZrLFMucGVuZGluZ19idWZbUy5sX2J1ZitTLmxhc3RfbGl0XT0yNTUmUSxTLmxhc3RfbGl0Kyssaz09PTA/Uy5keW5fbHRyZWVbMipRXSsrOihTLm1hdGNoZXMrKyxrLS0sUy5keW5fbHRyZWVbMiooaFtRXStkKzEpXSsrLFMuZHluX2R0cmVlWzIqVChrKV0rKyksUy5sYXN0X2xpdD09PVMubGl0X2J1ZnNpemUtMX0scy5fdHJfYWxpZ249ZnVuY3Rpb24oUyl7dGUoUywyLDMpLGooUyx3LFgpLGZ1bmN0aW9uKGspe2suYmlfdmFsaWQ9PT0xNj8odWUoayxrLmJpX2J1Ziksay5iaV9idWY9MCxrLmJpX3ZhbGlkPTApOjg8PWsuYmlfdmFsaWQmJihrLnBlbmRpbmdfYnVmW2sucGVuZGluZysrXT0yNTUmay5iaV9idWYsay5iaV9idWY+Pj04LGsuYmlfdmFsaWQtPTgpfShTKX19LHsiLi4vdXRpbHMvY29tbW9uIjo0MX1dLDUzOltmdW5jdGlvbih0LG4scyl7bi5leHBvcnRzPWZ1bmN0aW9uKCl7dGhpcy5pbnB1dD1udWxsLHRoaXMubmV4dF9pbj0wLHRoaXMuYXZhaWxfaW49MCx0aGlzLnRvdGFsX2luPTAsdGhpcy5vdXRwdXQ9bnVsbCx0aGlzLm5leHRfb3V0PTAsdGhpcy5hdmFpbF9vdXQ9MCx0aGlzLnRvdGFsX291dD0wLHRoaXMubXNnPSIiLHRoaXMuc3RhdGU9bnVsbCx0aGlzLmRhdGFfdHlwZT0yLHRoaXMuYWRsZXI9MH19LHt9XSw1NDpbZnVuY3Rpb24odCxuLHMpeyhmdW5jdGlvbihpKXsoZnVuY3Rpb24oYSxvKXtpZighYS5zZXRJbW1lZGlhdGUpe3ZhciB1LGwsQSxkLGc9MSxmPXt9LEM9ITEscD1hLmRvY3VtZW50LGI9T2JqZWN0LmdldFByb3RvdHlwZU9mJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSk7Yj1iJiZiLnNldFRpbWVvdXQ/YjphLHU9e30udG9TdHJpbmcuY2FsbChhLnByb2Nlc3MpPT09IltvYmplY3QgcHJvY2Vzc10iP2Z1bmN0aW9uKE4pe3Byb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKXtFKE4pfSl9OmZ1bmN0aW9uKCl7aWYoYS5wb3N0TWVzc2FnZSYmIWEuaW1wb3J0U2NyaXB0cyl7dmFyIE49ITAsST1hLm9ubWVzc2FnZTtyZXR1cm4gYS5vbm1lc3NhZ2U9ZnVuY3Rpb24oKXtOPSExfSxhLnBvc3RNZXNzYWdlKCIiLCIqIiksYS5vbm1lc3NhZ2U9SSxOfX0oKT8oZD0ic2V0SW1tZWRpYXRlJCIrTWF0aC5yYW5kb20oKSsiJCIsYS5hZGRFdmVudExpc3RlbmVyP2EuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsdywhMSk6YS5hdHRhY2hFdmVudCgib25tZXNzYWdlIix3KSxmdW5jdGlvbihOKXthLnBvc3RNZXNzYWdlKGQrTiwiKiIpfSk6YS5NZXNzYWdlQ2hhbm5lbD8oKEE9bmV3IE1lc3NhZ2VDaGFubmVsKS5wb3J0MS5vbm1lc3NhZ2U9ZnVuY3Rpb24oTil7RShOLmRhdGEpfSxmdW5jdGlvbihOKXtBLnBvcnQyLnBvc3RNZXNzYWdlKE4pfSk6cCYmIm9ucmVhZHlzdGF0ZWNoYW5nZSJpbiBwLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpPyhsPXAuZG9jdW1lbnRFbGVtZW50LGZ1bmN0aW9uKE4pe3ZhciBJPXAuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7SS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtFKE4pLEkub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsbC5yZW1vdmVDaGlsZChJKSxJPW51bGx9LGwuYXBwZW5kQ2hpbGQoSSl9KTpmdW5jdGlvbihOKXtzZXRUaW1lb3V0KEUsMCxOKX0sYi5zZXRJbW1lZGlhdGU9ZnVuY3Rpb24oTil7dHlwZW9mIE4hPSJmdW5jdGlvbiImJihOPW5ldyBGdW5jdGlvbigiIitOKSk7Zm9yKHZhciBJPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpLFI9MDtSPEkubGVuZ3RoO1IrKylJW1JdPWFyZ3VtZW50c1tSKzFdO3ZhciBNPXtjYWxsYmFjazpOLGFyZ3M6SX07cmV0dXJuIGZbZ109TSx1KGcpLGcrK30sYi5jbGVhckltbWVkaWF0ZT1tfWZ1bmN0aW9uIG0oTil7ZGVsZXRlIGZbTl19ZnVuY3Rpb24gRShOKXtpZihDKXNldFRpbWVvdXQoRSwwLE4pO2Vsc2V7dmFyIEk9ZltOXTtpZihJKXtDPSEwO3RyeXsoZnVuY3Rpb24oUil7dmFyIE09Ui5jYWxsYmFjayxXPVIuYXJncztzd2l0Y2goVy5sZW5ndGgpe2Nhc2UgMDpNKCk7YnJlYWs7Y2FzZSAxOk0oV1swXSk7YnJlYWs7Y2FzZSAyOk0oV1swXSxXWzFdKTticmVhaztjYXNlIDM6TShXWzBdLFdbMV0sV1syXSk7YnJlYWs7ZGVmYXVsdDpNLmFwcGx5KG8sVyl9fSkoSSl9ZmluYWxseXttKE4pLEM9ITF9fX19ZnVuY3Rpb24gdyhOKXtOLnNvdXJjZT09PWEmJnR5cGVvZiBOLmRhdGE9PSJzdHJpbmciJiZOLmRhdGEuaW5kZXhPZihkKT09PTAmJkUoK04uZGF0YS5zbGljZShkLmxlbmd0aCkpfX0pKHR5cGVvZiBzZWxmPiJ1Ij9pPT09dm9pZCAwP3RoaXM6aTpzZWxmKX0pLmNhbGwodGhpcyx0eXBlb2YgUW48InUiP1FuOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9XX0se30sWzEwXSkoMTApfSl9KShaYSk7dmFyIE9oPVphLmV4cG9ydHMsTGg9WHMoT2gpOy8qCiAqIEBsaWNlbnNlCiAqIGRvY3gtcHJldmlldyA8aHR0cHM6Ly9naXRodWIuY29tL1ZvbG9keW15ckJheWRhbGthL2RvY3hqcz4KICogUmVsZWFzZWQgdW5kZXIgQXBhY2hlIExpY2Vuc2UgMi4wICA8aHR0cHM6Ly9naXRodWIuY29tL1ZvbG9keW15ckJheWRhbGthL2RvY3hqcy9ibG9iL21hc3Rlci9MSUNFTlNFPgogKiBDb3B5cmlnaHQgVm9sb2R5bXlyIEJheWRhbGthCiAqL3ZhciBNZTsoZnVuY3Rpb24ocil7ci5PZmZpY2VEb2N1bWVudD0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9vZmZpY2VEb2N1bWVudCIsci5Gb250VGFibGU9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvZm9udFRhYmxlIixyLkltYWdlPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2ltYWdlIixyLk51bWJlcmluZz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9udW1iZXJpbmciLHIuU3R5bGVzPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3N0eWxlcyIsci5TdHlsZXNXaXRoRWZmZWN0cz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNy9yZWxhdGlvbnNoaXBzL3N0eWxlc1dpdGhFZmZlY3RzIixyLlRoZW1lPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3RoZW1lIixyLlNldHRpbmdzPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3NldHRpbmdzIixyLldlYlNldHRpbmdzPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3dlYlNldHRpbmdzIixyLkh5cGVybGluaz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9oeXBlcmxpbmsiLHIuRm9vdG5vdGVzPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2Zvb3Rub3RlcyIsci5FbmRub3Rlcz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9lbmRub3RlcyIsci5Gb290ZXI9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvZm9vdGVyIixyLkhlYWRlcj0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9oZWFkZXIiLHIuRXh0ZW5kZWRQcm9wZXJ0aWVzPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2V4dGVuZGVkLXByb3BlcnRpZXMiLHIuQ29yZVByb3BlcnRpZXM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvcmVsYXRpb25zaGlwcy9tZXRhZGF0YS9jb3JlLXByb3BlcnRpZXMiLHIuQ3VzdG9tUHJvcGVydGllcz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9yZWxhdGlvbnNoaXBzL21ldGFkYXRhL2N1c3RvbS1wcm9wZXJ0aWVzIixyLkNvbW1lbnRzPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2NvbW1lbnRzIixyLkNvbW1lbnRzRXh0ZW5kZWQ9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMTEvcmVsYXRpb25zaGlwcy9jb21tZW50c0V4dGVuZGVkIixyLkFsdENodW5rPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2FGQ2h1bmsifSkoTWV8fChNZT17fSkpO2Z1bmN0aW9uIFBoKHIsZSl7cmV0dXJuIGUuZWxlbWVudHMocikubWFwKHQ9Pih7aWQ6ZS5hdHRyKHQsIklkIiksdHlwZTplLmF0dHIodCwiVHlwZSIpLHRhcmdldDplLmF0dHIodCwiVGFyZ2V0IiksdGFyZ2V0TW9kZTplLmF0dHIodCwiVGFyZ2V0TW9kZSIpfSkpfWZ1bmN0aW9uIFVoKHIpe3JldHVybiByPy5yZXBsYWNlKC9bIC5dKy9nLCItIikucmVwbGFjZSgvWyZdKy9nLCJhbmQiKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uICRzKHIpe3JldHVybi9eW14iJ10uKlxzLipbXiInXSQvLnRlc3Qocik/YCcke3J9J2A6cn1mdW5jdGlvbiBLbihyKXtsZXQgZT1yLmxhc3RJbmRleE9mKCIvIikrMSx0PWU9PTA/IiI6ci5zdWJzdHJpbmcoMCxlKSxuPWU9PTA/cjpyLnN1YnN0cmluZyhlKTtyZXR1cm5bdCxuXX1mdW5jdGlvbiBlaShyLGUpe3RyeXtjb25zdCB0PSJodHRwOi8vZG9jeC8iO3JldHVybiBuZXcgVVJMKHIsdCtlKS50b1N0cmluZygpLnN1YnN0cmluZyh0Lmxlbmd0aCl9Y2F0Y2h7cmV0dXJuYCR7ZX0ke3J9YH19ZnVuY3Rpb24ganQocixlKXtyZXR1cm4gci5yZWR1Y2UoKHQsbik9Pih0W2UobildPW4sdCkse30pfWZ1bmN0aW9uIEdoKHIpe3JldHVybiBuZXcgUHJvbWlzZSgoZSx0KT0+e2NvbnN0IG49bmV3IEZpbGVSZWFkZXI7bi5vbmxvYWRlbmQ9KCk9PmUobi5yZXN1bHQpLG4ub25lcnJvcj0oKT0+dCgpLG4ucmVhZEFzRGF0YVVSTChyKX0pfWZ1bmN0aW9uIHRpKHIpe3JldHVybiByJiZ0eXBlb2Ygcj09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KHIpfWZ1bmN0aW9uIEhoKHIpe3JldHVybiB0eXBlb2Ygcj09InN0cmluZyJ8fHIgaW5zdGFuY2VvZiBTdHJpbmd9ZnVuY3Rpb24gWW4ociwuLi5lKXtpZighZS5sZW5ndGgpcmV0dXJuIHI7Y29uc3QgdD1lLnNoaWZ0KCk7aWYodGkocikmJnRpKHQpKWZvcihjb25zdCBuIGluIHQpaWYodGkodFtuXSkpe2NvbnN0IHM9cltuXT8/KHJbbl09e30pO1luKHMsdFtuXSl9ZWxzZSByW25dPXRbbl07cmV0dXJuIFluKHIsLi4uZSl9ZnVuY3Rpb24gc24ocil7cmV0dXJuIEFycmF5LmlzQXJyYXkocik/cjpbcl19ZnVuY3Rpb24gUWgocixlLHQpe3JldHVybiBlPnI/ZTp0PHI/dDpyfWNvbnN0IFZhPXt3b3JkbWw6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy93b3JkcHJvY2Vzc2luZ21sLzIwMDYvbWFpbiJ9LEdlPXtEeGE6e211bDouMDUsdW5pdDoicHQifSxFbXU6e211bDoxLzEyNzAwLHVuaXQ6InB0In0sRm9udFNpemU6e211bDouNSx1bml0OiJwdCJ9LEJvcmRlcjp7bXVsOi4xMjUsdW5pdDoicHQiLG1pbjouMjUsbWF4OjEyfSxQb2ludDp7bXVsOjEsdW5pdDoicHQifSxQZXJjZW50OnttdWw6LjAyLHVuaXQ6IiUifX07ZnVuY3Rpb24gemEocixlPUdlLkR4YSl7aWYocj09bnVsbHx8Ly4rKHBbeHRdfFslXSkkLy50ZXN0KHIpKXJldHVybiByO3ZhciB0PXBhcnNlSW50KHIpKmUubXVsO3JldHVybiBlLm1pbiYmZS5tYXgmJih0PVFoKHQsZS5taW4sZS5tYXgpKSxgJHt0LnRvRml4ZWQoMil9JHtlLnVuaXR9YH1mdW5jdGlvbiBXaChyLGU9ITEpe3N3aXRjaChyKXtjYXNlIjEiOnJldHVybiEwO2Nhc2UiMCI6cmV0dXJuITE7Y2FzZSJvbiI6cmV0dXJuITA7Y2FzZSJvZmYiOnJldHVybiExO2Nhc2UidHJ1ZSI6cmV0dXJuITA7Y2FzZSJmYWxzZSI6cmV0dXJuITE7ZGVmYXVsdDpyZXR1cm4gZX19ZnVuY3Rpb24gSmEocixlLHQpe2lmKHIubmFtZXNwYWNlVVJJIT1WYS53b3JkbWwpcmV0dXJuITE7c3dpdGNoKHIubG9jYWxOYW1lKXtjYXNlImNvbG9yIjplLmNvbG9yPXQuYXR0cihyLCJ2YWwiKTticmVhaztjYXNlInN6IjplLmZvbnRTaXplPXQubGVuZ3RoQXR0cihyLCJ2YWwiLEdlLkZvbnRTaXplKTticmVhaztkZWZhdWx0OnJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIEtoKHIsZT0hMSl7ZSYmKHI9ci5yZXBsYWNlKC88Wz9dLipbP10+LywiIikpLHI9Wmgocik7Y29uc3QgdD1uZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHIsImFwcGxpY2F0aW9uL3htbCIpLG49WWgodCk7aWYobil0aHJvdyBuZXcgRXJyb3Iobik7cmV0dXJuIHR9ZnVuY3Rpb24gWWgocil7cmV0dXJuIHIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInBhcnNlcmVycm9yIilbMF0/LnRleHRDb250ZW50fWZ1bmN0aW9uIFpoKHIpe3JldHVybiByLmNoYXJDb2RlQXQoMCk9PT02NTI3OT9yLnN1YnN0cmluZygxKTpyfWZ1bmN0aW9uIFZoKHIpe3JldHVybiBuZXcgWE1MU2VyaWFsaXplcigpLnNlcmlhbGl6ZVRvU3RyaW5nKHIpfWNsYXNzIHFhe2VsZW1lbnRzKGUsdD1udWxsKXtjb25zdCBuPVtdO2ZvcihsZXQgcz0wLGk9ZS5jaGlsZE5vZGVzLmxlbmd0aDtzPGk7cysrKXtsZXQgYT1lLmNoaWxkTm9kZXMuaXRlbShzKTthLm5vZGVUeXBlPT1Ob2RlLkVMRU1FTlRfTk9ERSYmKHQ9PW51bGx8fGEubG9jYWxOYW1lPT10KSYmbi5wdXNoKGEpfXJldHVybiBufWVsZW1lbnQoZSx0KXtmb3IobGV0IG49MCxzPWUuY2hpbGROb2Rlcy5sZW5ndGg7bjxzO24rKyl7bGV0IGk9ZS5jaGlsZE5vZGVzLml0ZW0obik7aWYoaS5ub2RlVHlwZT09MSYmaS5sb2NhbE5hbWU9PXQpcmV0dXJuIGl9cmV0dXJuIG51bGx9ZWxlbWVudEF0dHIoZSx0LG4pe3ZhciBzPXRoaXMuZWxlbWVudChlLHQpO3JldHVybiBzP3RoaXMuYXR0cihzLG4pOnZvaWQgMH1hdHRycyhlKXtyZXR1cm4gQXJyYXkuZnJvbShlLmF0dHJpYnV0ZXMpfWF0dHIoZSx0KXtmb3IobGV0IG49MCxzPWUuYXR0cmlidXRlcy5sZW5ndGg7bjxzO24rKyl7bGV0IGk9ZS5hdHRyaWJ1dGVzLml0ZW0obik7aWYoaS5sb2NhbE5hbWU9PXQpcmV0dXJuIGkudmFsdWV9cmV0dXJuIG51bGx9aW50QXR0cihlLHQsbj1udWxsKXt2YXIgcz10aGlzLmF0dHIoZSx0KTtyZXR1cm4gcz9wYXJzZUludChzKTpufWhleEF0dHIoZSx0LG49bnVsbCl7dmFyIHM9dGhpcy5hdHRyKGUsdCk7cmV0dXJuIHM/cGFyc2VJbnQocywxNik6bn1mbG9hdEF0dHIoZSx0LG49bnVsbCl7dmFyIHM9dGhpcy5hdHRyKGUsdCk7cmV0dXJuIHM/cGFyc2VGbG9hdChzKTpufWJvb2xBdHRyKGUsdCxuPW51bGwpe3JldHVybiBXaCh0aGlzLmF0dHIoZSx0KSxuKX1sZW5ndGhBdHRyKGUsdCxuPUdlLkR4YSl7cmV0dXJuIHphKHRoaXMuYXR0cihlLHQpLG4pfX1jb25zdCBEPW5ldyBxYTtjbGFzcyBjdHtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX3BhY2thZ2U9ZSx0aGlzLnBhdGg9dH1hc3luYyBsb2FkKCl7dGhpcy5yZWxzPWF3YWl0IHRoaXMuX3BhY2thZ2UubG9hZFJlbGF0aW9uc2hpcHModGhpcy5wYXRoKTtjb25zdCBlPWF3YWl0IHRoaXMuX3BhY2thZ2UubG9hZCh0aGlzLnBhdGgpLHQ9dGhpcy5fcGFja2FnZS5wYXJzZVhtbERvY3VtZW50KGUpO3RoaXMuX3BhY2thZ2Uub3B0aW9ucy5rZWVwT3JpZ2luJiYodGhpcy5feG1sRG9jdW1lbnQ9dCksdGhpcy5wYXJzZVhtbCh0LmZpcnN0RWxlbWVudENoaWxkKX1zYXZlKCl7dGhpcy5fcGFja2FnZS51cGRhdGUodGhpcy5wYXRoLFZoKHRoaXMuX3htbERvY3VtZW50KSl9cGFyc2VYbWwoZSl7fX1jb25zdCB6aD17ZW1iZWRSZWd1bGFyOiJyZWd1bGFyIixlbWJlZEJvbGQ6ImJvbGQiLGVtYmVkSXRhbGljOiJpdGFsaWMiLGVtYmVkQm9sZEl0YWxpYzoiYm9sZEl0YWxpYyJ9O2Z1bmN0aW9uIEpoKHIsZSl7cmV0dXJuIGUuZWxlbWVudHMocikubWFwKHQ9PnFoKHQsZSkpfWZ1bmN0aW9uIHFoKHIsZSl7bGV0IHQ9e25hbWU6ZS5hdHRyKHIsIm5hbWUiKSxlbWJlZEZvbnRSZWZzOltdfTtmb3IobGV0IG4gb2YgZS5lbGVtZW50cyhyKSlzd2l0Y2gobi5sb2NhbE5hbWUpe2Nhc2UiZmFtaWx5Ijp0LmZhbWlseT1lLmF0dHIobiwidmFsIik7YnJlYWs7Y2FzZSJhbHROYW1lIjp0LmFsdE5hbWU9ZS5hdHRyKG4sInZhbCIpO2JyZWFrO2Nhc2UiZW1iZWRSZWd1bGFyIjpjYXNlImVtYmVkQm9sZCI6Y2FzZSJlbWJlZEl0YWxpYyI6Y2FzZSJlbWJlZEJvbGRJdGFsaWMiOnQuZW1iZWRGb250UmVmcy5wdXNoKGpoKG4sZSkpO2JyZWFrfXJldHVybiB0fWZ1bmN0aW9uIGpoKHIsZSl7cmV0dXJue2lkOmUuYXR0cihyLCJpZCIpLGtleTplLmF0dHIociwiZm9udEtleSIpLHR5cGU6emhbci5sb2NhbE5hbWVdfX1jbGFzcyBYaCBleHRlbmRzIGN0e3BhcnNlWG1sKGUpe3RoaXMuZm9udHM9SmgoZSx0aGlzLl9wYWNrYWdlLnhtbFBhcnNlcil9fWNsYXNzIHJpe2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5femlwPWUsdGhpcy5vcHRpb25zPXQsdGhpcy54bWxQYXJzZXI9bmV3IHFhfWdldChlKXtjb25zdCB0PSRoKGUpO3JldHVybiB0aGlzLl96aXAuZmlsZXNbdF0/P3RoaXMuX3ppcC5maWxlc1t0LnJlcGxhY2UoL1wvL2csIlxcIildfXVwZGF0ZShlLHQpe3RoaXMuX3ppcC5maWxlKGUsdCl9c3RhdGljIGFzeW5jIGxvYWQoZSx0KXtjb25zdCBuPWF3YWl0IExoLmxvYWRBc3luYyhlKTtyZXR1cm4gbmV3IHJpKG4sdCl9c2F2ZShlPSJibG9iIil7cmV0dXJuIHRoaXMuX3ppcC5nZW5lcmF0ZUFzeW5jKHt0eXBlOmV9KX1sb2FkKGUsdD0ic3RyaW5nIil7cmV0dXJuIHRoaXMuZ2V0KGUpPy5hc3luYyh0KT8/UHJvbWlzZS5yZXNvbHZlKG51bGwpfWFzeW5jIGxvYWRSZWxhdGlvbnNoaXBzKGU9bnVsbCl7bGV0IHQ9Il9yZWxzLy5yZWxzIjtpZihlIT1udWxsKXtjb25zdFtzLGldPUtuKGUpO3Q9YCR7c31fcmVscy8ke2l9LnJlbHNgfWNvbnN0IG49YXdhaXQgdGhpcy5sb2FkKHQpO3JldHVybiBuP1BoKHRoaXMucGFyc2VYbWxEb2N1bWVudChuKS5maXJzdEVsZW1lbnRDaGlsZCx0aGlzLnhtbFBhcnNlcik6bnVsbH1wYXJzZVhtbERvY3VtZW50KGUpe3JldHVybiBLaChlLHRoaXMub3B0aW9ucy50cmltWG1sRGVjbGFyYXRpb24pfX1mdW5jdGlvbiAkaChyKXtyZXR1cm4gci5zdGFydHNXaXRoKCIvIik/ci5zdWJzdHIoMSk6cn1jbGFzcyBlQSBleHRlbmRzIGN0e2NvbnN0cnVjdG9yKGUsdCxuKXtzdXBlcihlLHQpLHRoaXMuX2RvY3VtZW50UGFyc2VyPW59cGFyc2VYbWwoZSl7dGhpcy5ib2R5PXRoaXMuX2RvY3VtZW50UGFyc2VyLnBhcnNlRG9jdW1lbnRGaWxlKGUpfX1mdW5jdGlvbiBabihyLGUpe3JldHVybnt0eXBlOmUuYXR0cihyLCJ2YWwiKSxjb2xvcjplLmF0dHIociwiY29sb3IiKSxzaXplOmUubGVuZ3RoQXR0cihyLCJzeiIsR2UuQm9yZGVyKSxvZmZzZXQ6ZS5sZW5ndGhBdHRyKHIsInNwYWNlIixHZS5Qb2ludCksZnJhbWU6ZS5ib29sQXR0cihyLCJmcmFtZSIpLHNoYWRvdzplLmJvb2xBdHRyKHIsInNoYWRvdyIpfX1mdW5jdGlvbiB0QShyLGUpe3ZhciB0PXt9O2ZvcihsZXQgbiBvZiBlLmVsZW1lbnRzKHIpKXN3aXRjaChuLmxvY2FsTmFtZSl7Y2FzZSJsZWZ0Ijp0LmxlZnQ9Wm4obixlKTticmVhaztjYXNlInRvcCI6dC50b3A9Wm4obixlKTticmVhaztjYXNlInJpZ2h0Ijp0LnJpZ2h0PVpuKG4sZSk7YnJlYWs7Y2FzZSJib3R0b20iOnQuYm90dG9tPVpuKG4sZSk7YnJlYWt9cmV0dXJuIHR9dmFyIGphOyhmdW5jdGlvbihyKXtyLkNvbnRpbnVvdXM9ImNvbnRpbnVvdXMiLHIuTmV4dFBhZ2U9Im5leHRQYWdlIixyLk5leHRDb2x1bW49Im5leHRDb2x1bW4iLHIuRXZlblBhZ2U9ImV2ZW5QYWdlIixyLk9kZFBhZ2U9Im9kZFBhZ2UifSkoamF8fChqYT17fSkpO2Z1bmN0aW9uIFhhKHIsZT1EKXt2YXIgdD17fTtmb3IobGV0IG4gb2YgZS5lbGVtZW50cyhyKSlzd2l0Y2gobi5sb2NhbE5hbWUpe2Nhc2UicGdTeiI6dC5wYWdlU2l6ZT17d2lkdGg6ZS5sZW5ndGhBdHRyKG4sInciKSxoZWlnaHQ6ZS5sZW5ndGhBdHRyKG4sImgiKSxvcmllbnRhdGlvbjplLmF0dHIobiwib3JpZW50Iil9O2JyZWFrO2Nhc2UidHlwZSI6dC50eXBlPWUuYXR0cihuLCJ2YWwiKTticmVhaztjYXNlInBnTWFyIjp0LnBhZ2VNYXJnaW5zPXtsZWZ0OmUubGVuZ3RoQXR0cihuLCJsZWZ0IikscmlnaHQ6ZS5sZW5ndGhBdHRyKG4sInJpZ2h0IiksdG9wOmUubGVuZ3RoQXR0cihuLCJ0b3AiKSxib3R0b206ZS5sZW5ndGhBdHRyKG4sImJvdHRvbSIpLGhlYWRlcjplLmxlbmd0aEF0dHIobiwiaGVhZGVyIiksZm9vdGVyOmUubGVuZ3RoQXR0cihuLCJmb290ZXIiKSxndXR0ZXI6ZS5sZW5ndGhBdHRyKG4sImd1dHRlciIpfTticmVhaztjYXNlImNvbHMiOnQuY29sdW1ucz1yQShuLGUpO2JyZWFrO2Nhc2UiaGVhZGVyUmVmZXJlbmNlIjoodC5oZWFkZXJSZWZzPz8odC5oZWFkZXJSZWZzPVtdKSkucHVzaCgkYShuLGUpKTticmVhaztjYXNlImZvb3RlclJlZmVyZW5jZSI6KHQuZm9vdGVyUmVmcz8/KHQuZm9vdGVyUmVmcz1bXSkpLnB1c2goJGEobixlKSk7YnJlYWs7Y2FzZSJ0aXRsZVBnIjp0LnRpdGxlUGFnZT1lLmJvb2xBdHRyKG4sInZhbCIsITApO2JyZWFrO2Nhc2UicGdCb3JkZXJzIjp0LnBhZ2VCb3JkZXJzPXRBKG4sZSk7YnJlYWs7Y2FzZSJwZ051bVR5cGUiOnQucGFnZU51bWJlcj1uQShuLGUpO2JyZWFrfXJldHVybiB0fWZ1bmN0aW9uIHJBKHIsZSl7cmV0dXJue251bWJlck9mQ29sdW1uczplLmludEF0dHIociwibnVtIiksc3BhY2U6ZS5sZW5ndGhBdHRyKHIsInNwYWNlIiksc2VwYXJhdG9yOmUuYm9vbEF0dHIociwic2VwIiksZXF1YWxXaWR0aDplLmJvb2xBdHRyKHIsImVxdWFsV2lkdGgiLCEwKSxjb2x1bW5zOmUuZWxlbWVudHMociwiY29sIikubWFwKHQ9Pih7d2lkdGg6ZS5sZW5ndGhBdHRyKHQsInciKSxzcGFjZTplLmxlbmd0aEF0dHIodCwic3BhY2UiKX0pKX19ZnVuY3Rpb24gbkEocixlKXtyZXR1cm57Y2hhcFNlcDplLmF0dHIociwiY2hhcFNlcCIpLGNoYXBTdHlsZTplLmF0dHIociwiY2hhcFN0eWxlIiksZm9ybWF0OmUuYXR0cihyLCJmbXQiKSxzdGFydDplLmludEF0dHIociwic3RhcnQiKX19ZnVuY3Rpb24gJGEocixlKXtyZXR1cm57aWQ6ZS5hdHRyKHIsImlkIiksdHlwZTplLmF0dHIociwidHlwZSIpfX1mdW5jdGlvbiBzQShyLGUpe3JldHVybntiZWZvcmU6ZS5sZW5ndGhBdHRyKHIsImJlZm9yZSIpLGFmdGVyOmUubGVuZ3RoQXR0cihyLCJhZnRlciIpLGxpbmU6ZS5pbnRBdHRyKHIsImxpbmUiKSxsaW5lUnVsZTplLmF0dHIociwibGluZVJ1bGUiKX19ZnVuY3Rpb24gbmkocixlKXtsZXQgdD17fTtmb3IobGV0IG4gb2YgZS5lbGVtZW50cyhyKSlpQShuLHQsZSk7cmV0dXJuIHR9ZnVuY3Rpb24gaUEocixlLHQpe3JldHVybiEhSmEocixlLHQpfWZ1bmN0aW9uIGVvKHIsZSl7bGV0IHQ9e307Zm9yKGxldCBuIG9mIGUuZWxlbWVudHMocikpdG8obix0LGUpO3JldHVybiB0fWZ1bmN0aW9uIHRvKHIsZSx0KXtpZihyLm5hbWVzcGFjZVVSSSE9VmEud29yZG1sKXJldHVybiExO2lmKEphKHIsZSx0KSlyZXR1cm4hMDtzd2l0Y2goci5sb2NhbE5hbWUpe2Nhc2UidGFicyI6ZS50YWJzPWFBKHIsdCk7YnJlYWs7Y2FzZSJzZWN0UHIiOmUuc2VjdGlvblByb3BzPVhhKHIsdCk7YnJlYWs7Y2FzZSJudW1QciI6ZS5udW1iZXJpbmc9b0Eocix0KTticmVhaztjYXNlInNwYWNpbmciOnJldHVybiBlLmxpbmVTcGFjaW5nPXNBKHIsdCksITE7Y2FzZSJ0ZXh0QWxpZ25tZW50IjpyZXR1cm4gZS50ZXh0QWxpZ25tZW50PXQuYXR0cihyLCJ2YWwiKSwhMTtjYXNlImtlZXBMaW5lcyI6ZS5rZWVwTGluZXM9dC5ib29sQXR0cihyLCJ2YWwiLCEwKTticmVhaztjYXNlImtlZXBOZXh0IjplLmtlZXBOZXh0PXQuYm9vbEF0dHIociwidmFsIiwhMCk7YnJlYWs7Y2FzZSJwYWdlQnJlYWtCZWZvcmUiOmUucGFnZUJyZWFrQmVmb3JlPXQuYm9vbEF0dHIociwidmFsIiwhMCk7YnJlYWs7Y2FzZSJvdXRsaW5lTHZsIjplLm91dGxpbmVMZXZlbD10LmludEF0dHIociwidmFsIik7YnJlYWs7Y2FzZSJwU3R5bGUiOmUuc3R5bGVOYW1lPXQuYXR0cihyLCJ2YWwiKTticmVhaztjYXNlInJQciI6ZS5ydW5Qcm9wcz1uaShyLHQpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gYUEocixlKXtyZXR1cm4gZS5lbGVtZW50cyhyLCJ0YWIiKS5tYXAodD0+KHtwb3NpdGlvbjplLmxlbmd0aEF0dHIodCwicG9zIiksbGVhZGVyOmUuYXR0cih0LCJsZWFkZXIiKSxzdHlsZTplLmF0dHIodCwidmFsIil9KSl9ZnVuY3Rpb24gb0EocixlKXt2YXIgdD17fTtmb3IobGV0IG4gb2YgZS5lbGVtZW50cyhyKSlzd2l0Y2gobi5sb2NhbE5hbWUpe2Nhc2UibnVtSWQiOnQuaWQ9ZS5hdHRyKG4sInZhbCIpO2JyZWFrO2Nhc2UiaWx2bCI6dC5sZXZlbD1lLmludEF0dHIobiwidmFsIik7YnJlYWt9cmV0dXJuIHR9ZnVuY3Rpb24gdUEocixlKXtsZXQgdD17bnVtYmVyaW5nczpbXSxhYnN0cmFjdE51bWJlcmluZ3M6W10sYnVsbGV0UGljdHVyZXM6W119O2ZvcihsZXQgbiBvZiBlLmVsZW1lbnRzKHIpKXN3aXRjaChuLmxvY2FsTmFtZSl7Y2FzZSJudW0iOnQubnVtYmVyaW5ncy5wdXNoKGxBKG4sZSkpO2JyZWFrO2Nhc2UiYWJzdHJhY3ROdW0iOnQuYWJzdHJhY3ROdW1iZXJpbmdzLnB1c2goY0EobixlKSk7YnJlYWs7Y2FzZSJudW1QaWNCdWxsZXQiOnQuYnVsbGV0UGljdHVyZXMucHVzaChBQShuLGUpKTticmVha31yZXR1cm4gdH1mdW5jdGlvbiBsQShyLGUpe2xldCB0PXtpZDplLmF0dHIociwibnVtSWQiKSxvdmVycmlkZXM6W119O2ZvcihsZXQgbiBvZiBlLmVsZW1lbnRzKHIpKXN3aXRjaChuLmxvY2FsTmFtZSl7Y2FzZSJhYnN0cmFjdE51bUlkIjp0LmFic3RyYWN0SWQ9ZS5hdHRyKG4sInZhbCIpO2JyZWFrO2Nhc2UibHZsT3ZlcnJpZGUiOnQub3ZlcnJpZGVzLnB1c2goaEEobixlKSk7YnJlYWt9cmV0dXJuIHR9ZnVuY3Rpb24gY0EocixlKXtsZXQgdD17aWQ6ZS5hdHRyKHIsImFic3RyYWN0TnVtSWQiKSxsZXZlbHM6W119O2ZvcihsZXQgbiBvZiBlLmVsZW1lbnRzKHIpKXN3aXRjaChuLmxvY2FsTmFtZSl7Y2FzZSJuYW1lIjp0Lm5hbWU9ZS5hdHRyKG4sInZhbCIpO2JyZWFrO2Nhc2UibXVsdGlMZXZlbFR5cGUiOnQubXVsdGlMZXZlbFR5cGU9ZS5hdHRyKG4sInZhbCIpO2JyZWFrO2Nhc2UibnVtU3R5bGVMaW5rIjp0Lm51bWJlcmluZ1N0eWxlTGluaz1lLmF0dHIobiwidmFsIik7YnJlYWs7Y2FzZSJzdHlsZUxpbmsiOnQuc3R5bGVMaW5rPWUuYXR0cihuLCJ2YWwiKTticmVhaztjYXNlImx2bCI6dC5sZXZlbHMucHVzaChybyhuLGUpKTticmVha31yZXR1cm4gdH1mdW5jdGlvbiBybyhyLGUpe2xldCB0PXtsZXZlbDplLmludEF0dHIociwiaWx2bCIpfTtmb3IobGV0IG4gb2YgZS5lbGVtZW50cyhyKSlzd2l0Y2gobi5sb2NhbE5hbWUpe2Nhc2Uic3RhcnQiOnQuc3RhcnQ9ZS5hdHRyKG4sInZhbCIpO2JyZWFrO2Nhc2UibHZsUmVzdGFydCI6dC5yZXN0YXJ0PWUuaW50QXR0cihuLCJ2YWwiKTticmVhaztjYXNlIm51bUZtdCI6dC5mb3JtYXQ9ZS5hdHRyKG4sInZhbCIpO2JyZWFrO2Nhc2UibHZsVGV4dCI6dC50ZXh0PWUuYXR0cihuLCJ2YWwiKTticmVhaztjYXNlImx2bEpjIjp0Lmp1c3RpZmljYXRpb249ZS5hdHRyKG4sInZhbCIpO2JyZWFrO2Nhc2UibHZsUGljQnVsbGV0SWQiOnQuYnVsbGV0UGljdHVyZUlkPWUuYXR0cihuLCJ2YWwiKTticmVhaztjYXNlInBTdHlsZSI6dC5wYXJhZ3JhcGhTdHlsZT1lLmF0dHIobiwidmFsIik7YnJlYWs7Y2FzZSJwUHIiOnQucGFyYWdyYXBoUHJvcHM9ZW8obixlKTticmVhaztjYXNlInJQciI6dC5ydW5Qcm9wcz1uaShuLGUpO2JyZWFrfXJldHVybiB0fWZ1bmN0aW9uIGhBKHIsZSl7bGV0IHQ9e2xldmVsOmUuaW50QXR0cihyLCJpbHZsIil9O2ZvcihsZXQgbiBvZiBlLmVsZW1lbnRzKHIpKXN3aXRjaChuLmxvY2FsTmFtZSl7Y2FzZSJzdGFydE92ZXJyaWRlIjp0LnN0YXJ0PWUuaW50QXR0cihuLCJ2YWwiKTticmVhaztjYXNlImx2bCI6dC5udW1iZXJpbmdMZXZlbD1ybyhuLGUpO2JyZWFrfXJldHVybiB0fWZ1bmN0aW9uIEFBKHIsZSl7dmFyIHQ9ZS5lbGVtZW50KHIsInBpY3QiKSxuPXQmJmUuZWxlbWVudCh0LCJzaGFwZSIpLHM9biYmZS5lbGVtZW50KG4sImltYWdlZGF0YSIpO3JldHVybiBzP3tpZDplLmF0dHIociwibnVtUGljQnVsbGV0SWQiKSxyZWZlcmVuY2VJZDplLmF0dHIocywiaWQiKSxzdHlsZTplLmF0dHIobiwic3R5bGUiKX06bnVsbH1jbGFzcyBkQSBleHRlbmRzIGN0e2NvbnN0cnVjdG9yKGUsdCxuKXtzdXBlcihlLHQpLHRoaXMuX2RvY3VtZW50UGFyc2VyPW59cGFyc2VYbWwoZSl7T2JqZWN0LmFzc2lnbih0aGlzLHVBKGUsdGhpcy5fcGFja2FnZS54bWxQYXJzZXIpKSx0aGlzLmRvbU51bWJlcmluZ3M9dGhpcy5fZG9jdW1lbnRQYXJzZXIucGFyc2VOdW1iZXJpbmdGaWxlKGUpfX1jbGFzcyBmQSBleHRlbmRzIGN0e2NvbnN0cnVjdG9yKGUsdCxuKXtzdXBlcihlLHQpLHRoaXMuX2RvY3VtZW50UGFyc2VyPW59cGFyc2VYbWwoZSl7dGhpcy5zdHlsZXM9dGhpcy5fZG9jdW1lbnRQYXJzZXIucGFyc2VTdHlsZXNGaWxlKGUpfX12YXIgQjsoZnVuY3Rpb24ocil7ci5Eb2N1bWVudD0iZG9jdW1lbnQiLHIuUGFyYWdyYXBoPSJwYXJhZ3JhcGgiLHIuUnVuPSJydW4iLHIuQnJlYWs9ImJyZWFrIixyLk5vQnJlYWtIeXBoZW49Im5vQnJlYWtIeXBoZW4iLHIuVGFibGU9InRhYmxlIixyLlJvdz0icm93IixyLkNlbGw9ImNlbGwiLHIuSHlwZXJsaW5rPSJoeXBlcmxpbmsiLHIuU21hcnRUYWc9InNtYXJ0VGFnIixyLkRyYXdpbmc9ImRyYXdpbmciLHIuSW1hZ2U9ImltYWdlIixyLlRleHQ9InRleHQiLHIuVGFiPSJ0YWIiLHIuU3ltYm9sPSJzeW1ib2wiLHIuQm9va21hcmtTdGFydD0iYm9va21hcmtTdGFydCIsci5Cb29rbWFya0VuZD0iYm9va21hcmtFbmQiLHIuRm9vdGVyPSJmb290ZXIiLHIuSGVhZGVyPSJoZWFkZXIiLHIuRm9vdG5vdGVSZWZlcmVuY2U9ImZvb3Rub3RlUmVmZXJlbmNlIixyLkVuZG5vdGVSZWZlcmVuY2U9ImVuZG5vdGVSZWZlcmVuY2UiLHIuRm9vdG5vdGU9ImZvb3Rub3RlIixyLkVuZG5vdGU9ImVuZG5vdGUiLHIuU2ltcGxlRmllbGQ9InNpbXBsZUZpZWxkIixyLkNvbXBsZXhGaWVsZD0iY29tcGxleEZpZWxkIixyLkluc3RydWN0aW9uPSJpbnN0cnVjdGlvbiIsci5WbWxQaWN0dXJlPSJ2bWxQaWN0dXJlIixyLk1tbE1hdGg9Im1tbE1hdGgiLHIuTW1sTWF0aFBhcmFncmFwaD0ibW1sTWF0aFBhcmFncmFwaCIsci5NbWxGcmFjdGlvbj0ibW1sRnJhY3Rpb24iLHIuTW1sRnVuY3Rpb249Im1tbEZ1bmN0aW9uIixyLk1tbEZ1bmN0aW9uTmFtZT0ibW1sRnVuY3Rpb25OYW1lIixyLk1tbE51bWVyYXRvcj0ibW1sTnVtZXJhdG9yIixyLk1tbERlbm9taW5hdG9yPSJtbWxEZW5vbWluYXRvciIsci5NbWxSYWRpY2FsPSJtbWxSYWRpY2FsIixyLk1tbEJhc2U9Im1tbEJhc2UiLHIuTW1sRGVncmVlPSJtbWxEZWdyZWUiLHIuTW1sU3VwZXJzY3JpcHQ9Im1tbFN1cGVyc2NyaXB0IixyLk1tbFN1YnNjcmlwdD0ibW1sU3Vic2NyaXB0IixyLk1tbFByZVN1YlN1cGVyPSJtbWxQcmVTdWJTdXBlciIsci5NbWxTdWJBcmd1bWVudD0ibW1sU3ViQXJndW1lbnQiLHIuTW1sU3VwZXJBcmd1bWVudD0ibW1sU3VwZXJBcmd1bWVudCIsci5NbWxOYXJ5PSJtbWxOYXJ5IixyLk1tbERlbGltaXRlcj0ibW1sRGVsaW1pdGVyIixyLk1tbFJ1bj0ibW1sUnVuIixyLk1tbEVxdWF0aW9uQXJyYXk9Im1tbEVxdWF0aW9uQXJyYXkiLHIuTW1sTGltaXQ9Im1tbExpbWl0IixyLk1tbExpbWl0TG93ZXI9Im1tbExpbWl0TG93ZXIiLHIuTW1sTWF0cml4PSJtbWxNYXRyaXgiLHIuTW1sTWF0cml4Um93PSJtbWxNYXRyaXhSb3ciLHIuTW1sQm94PSJtbWxCb3giLHIuTW1sQmFyPSJtbWxCYXIiLHIuTW1sR3JvdXBDaGFyPSJtbWxHcm91cENoYXIiLHIuVm1sRWxlbWVudD0idm1sRWxlbWVudCIsci5JbnNlcnRlZD0iaW5zZXJ0ZWQiLHIuRGVsZXRlZD0iZGVsZXRlZCIsci5EZWxldGVkVGV4dD0iZGVsZXRlZFRleHQiLHIuQ29tbWVudD0iY29tbWVudCIsci5Db21tZW50UmVmZXJlbmNlPSJjb21tZW50UmVmZXJlbmNlIixyLkNvbW1lbnRSYW5nZVN0YXJ0PSJjb21tZW50UmFuZ2VTdGFydCIsci5Db21tZW50UmFuZ2VFbmQ9ImNvbW1lbnRSYW5nZUVuZCIsci5BbHRDaHVuaz0iYWx0Q2h1bmsifSkoQnx8KEI9e30pKTtjbGFzcyBjcntjb25zdHJ1Y3Rvcigpe3RoaXMuY2hpbGRyZW49W10sdGhpcy5jc3NTdHlsZT17fX19Y2xhc3MgcEEgZXh0ZW5kcyBjcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy50eXBlPUIuSGVhZGVyfX1jbGFzcyBnQSBleHRlbmRzIGNye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnR5cGU9Qi5Gb290ZXJ9fWNsYXNzIG5vIGV4dGVuZHMgY3R7Y29uc3RydWN0b3IoZSx0LG4pe3N1cGVyKGUsdCksdGhpcy5fZG9jdW1lbnRQYXJzZXI9bn1wYXJzZVhtbChlKXt0aGlzLnJvb3RFbGVtZW50PXRoaXMuY3JlYXRlUm9vdEVsZW1lbnQoKSx0aGlzLnJvb3RFbGVtZW50LmNoaWxkcmVuPXRoaXMuX2RvY3VtZW50UGFyc2VyLnBhcnNlQm9keUVsZW1lbnRzKGUpfX1jbGFzcyBtQSBleHRlbmRzIG5ve2NyZWF0ZVJvb3RFbGVtZW50KCl7cmV0dXJuIG5ldyBwQX19Y2xhc3MgYkEgZXh0ZW5kcyBub3tjcmVhdGVSb290RWxlbWVudCgpe3JldHVybiBuZXcgZ0F9fWZ1bmN0aW9uIENBKHIsZSl7Y29uc3QgdD17fTtmb3IobGV0IG4gb2YgZS5lbGVtZW50cyhyKSlzd2l0Y2gobi5sb2NhbE5hbWUpe2Nhc2UiVGVtcGxhdGUiOnQudGVtcGxhdGU9bi50ZXh0Q29udGVudDticmVhaztjYXNlIlBhZ2VzIjp0LnBhZ2VzPWFuKG4udGV4dENvbnRlbnQpO2JyZWFrO2Nhc2UiV29yZHMiOnQud29yZHM9YW4obi50ZXh0Q29udGVudCk7YnJlYWs7Y2FzZSJDaGFyYWN0ZXJzIjp0LmNoYXJhY3RlcnM9YW4obi50ZXh0Q29udGVudCk7YnJlYWs7Y2FzZSJBcHBsaWNhdGlvbiI6dC5hcHBsaWNhdGlvbj1uLnRleHRDb250ZW50O2JyZWFrO2Nhc2UiTGluZXMiOnQubGluZXM9YW4obi50ZXh0Q29udGVudCk7YnJlYWs7Y2FzZSJQYXJhZ3JhcGhzIjp0LnBhcmFncmFwaHM9YW4obi50ZXh0Q29udGVudCk7YnJlYWs7Y2FzZSJDb21wYW55Ijp0LmNvbXBhbnk9bi50ZXh0Q29udGVudDticmVhaztjYXNlIkFwcFZlcnNpb24iOnQuYXBwVmVyc2lvbj1uLnRleHRDb250ZW50O2JyZWFrfXJldHVybiB0fWZ1bmN0aW9uIGFuKHIpe2lmKCEodHlwZW9mIHI+InUiKSlyZXR1cm4gcGFyc2VJbnQocil9Y2xhc3MgU0EgZXh0ZW5kcyBjdHtwYXJzZVhtbChlKXt0aGlzLnByb3BzPUNBKGUsdGhpcy5fcGFja2FnZS54bWxQYXJzZXIpfX1mdW5jdGlvbiBFQShyLGUpe2NvbnN0IHQ9e307Zm9yKGxldCBuIG9mIGUuZWxlbWVudHMocikpc3dpdGNoKG4ubG9jYWxOYW1lKXtjYXNlInRpdGxlIjp0LnRpdGxlPW4udGV4dENvbnRlbnQ7YnJlYWs7Y2FzZSJkZXNjcmlwdGlvbiI6dC5kZXNjcmlwdGlvbj1uLnRleHRDb250ZW50O2JyZWFrO2Nhc2Uic3ViamVjdCI6dC5zdWJqZWN0PW4udGV4dENvbnRlbnQ7YnJlYWs7Y2FzZSJjcmVhdG9yIjp0LmNyZWF0b3I9bi50ZXh0Q29udGVudDticmVhaztjYXNlImtleXdvcmRzIjp0LmtleXdvcmRzPW4udGV4dENvbnRlbnQ7YnJlYWs7Y2FzZSJsYW5ndWFnZSI6dC5sYW5ndWFnZT1uLnRleHRDb250ZW50O2JyZWFrO2Nhc2UibGFzdE1vZGlmaWVkQnkiOnQubGFzdE1vZGlmaWVkQnk9bi50ZXh0Q29udGVudDticmVhaztjYXNlInJldmlzaW9uIjpuLnRleHRDb250ZW50JiYodC5yZXZpc2lvbj1wYXJzZUludChuLnRleHRDb250ZW50KSk7YnJlYWt9cmV0dXJuIHR9Y2xhc3MgeUEgZXh0ZW5kcyBjdHtwYXJzZVhtbChlKXt0aGlzLnByb3BzPUVBKGUsdGhpcy5fcGFja2FnZS54bWxQYXJzZXIpfX1jbGFzcyB2QXt9ZnVuY3Rpb24gd0EocixlKXt2YXIgdD1uZXcgdkEsbj1lLmVsZW1lbnQociwidGhlbWVFbGVtZW50cyIpO2ZvcihsZXQgcyBvZiBlLmVsZW1lbnRzKG4pKXN3aXRjaChzLmxvY2FsTmFtZSl7Y2FzZSJjbHJTY2hlbWUiOnQuY29sb3JTY2hlbWU9REEocyxlKTticmVhaztjYXNlImZvbnRTY2hlbWUiOnQuZm9udFNjaGVtZT1JQShzLGUpO2JyZWFrfXJldHVybiB0fWZ1bmN0aW9uIERBKHIsZSl7dmFyIHQ9e25hbWU6ZS5hdHRyKHIsIm5hbWUiKSxjb2xvcnM6e319O2ZvcihsZXQgaSBvZiBlLmVsZW1lbnRzKHIpKXt2YXIgbj1lLmVsZW1lbnQoaSwic3JnYkNsciIpLHM9ZS5lbGVtZW50KGksInN5c0NsciIpO24/dC5jb2xvcnNbaS5sb2NhbE5hbWVdPWUuYXR0cihuLCJ2YWwiKTpzJiYodC5jb2xvcnNbaS5sb2NhbE5hbWVdPWUuYXR0cihzLCJsYXN0Q2xyIikpfXJldHVybiB0fWZ1bmN0aW9uIElBKHIsZSl7dmFyIHQ9e25hbWU6ZS5hdHRyKHIsIm5hbWUiKX07Zm9yKGxldCBuIG9mIGUuZWxlbWVudHMocikpc3dpdGNoKG4ubG9jYWxOYW1lKXtjYXNlIm1ham9yRm9udCI6dC5tYWpvckZvbnQ9c28obixlKTticmVhaztjYXNlIm1pbm9yRm9udCI6dC5taW5vckZvbnQ9c28obixlKTticmVha31yZXR1cm4gdH1mdW5jdGlvbiBzbyhyLGUpe3JldHVybntsYXRpblR5cGVmYWNlOmUuZWxlbWVudEF0dHIociwibGF0aW4iLCJ0eXBlZmFjZSIpLGVhVHlwZWZhY2U6ZS5lbGVtZW50QXR0cihyLCJlYSIsInR5cGVmYWNlIiksY3NUeXBlZmFjZTplLmVsZW1lbnRBdHRyKHIsImNzIiwidHlwZWZhY2UiKX19Y2xhc3MgTkEgZXh0ZW5kcyBjdHtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsdCl9cGFyc2VYbWwoZSl7dGhpcy50aGVtZT13QShlLHRoaXMuX3BhY2thZ2UueG1sUGFyc2VyKX19Y2xhc3MgaW97fWNsYXNzIGtBIGV4dGVuZHMgaW97Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMudHlwZT1CLkZvb3Rub3RlfX1jbGFzcyB4QSBleHRlbmRzIGlve2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnR5cGU9Qi5FbmRub3RlfX1jbGFzcyBhbyBleHRlbmRzIGN0e2NvbnN0cnVjdG9yKGUsdCxuKXtzdXBlcihlLHQpLHRoaXMuX2RvY3VtZW50UGFyc2VyPW59fWNsYXNzIFRBIGV4dGVuZHMgYW97Y29uc3RydWN0b3IoZSx0LG4pe3N1cGVyKGUsdCxuKX1wYXJzZVhtbChlKXt0aGlzLm5vdGVzPXRoaXMuX2RvY3VtZW50UGFyc2VyLnBhcnNlTm90ZXMoZSwiZm9vdG5vdGUiLGtBKX19Y2xhc3MgQkEgZXh0ZW5kcyBhb3tjb25zdHJ1Y3RvcihlLHQsbil7c3VwZXIoZSx0LG4pfXBhcnNlWG1sKGUpe3RoaXMubm90ZXM9dGhpcy5fZG9jdW1lbnRQYXJzZXIucGFyc2VOb3RlcyhlLCJlbmRub3RlIix4QSl9fWZ1bmN0aW9uIF9BKHIsZSl7dmFyIHQ9e307Zm9yKGxldCBuIG9mIGUuZWxlbWVudHMocikpc3dpdGNoKG4ubG9jYWxOYW1lKXtjYXNlImRlZmF1bHRUYWJTdG9wIjp0LmRlZmF1bHRUYWJTdG9wPWUubGVuZ3RoQXR0cihuLCJ2YWwiKTticmVhaztjYXNlImZvb3Rub3RlUHIiOnQuZm9vdG5vdGVQcm9wcz1vbyhuLGUpO2JyZWFrO2Nhc2UiZW5kbm90ZVByIjp0LmVuZG5vdGVQcm9wcz1vbyhuLGUpO2JyZWFrO2Nhc2UiYXV0b0h5cGhlbmF0aW9uIjp0LmF1dG9IeXBoZW5hdGlvbj1lLmJvb2xBdHRyKG4sInZhbCIpO2JyZWFrfXJldHVybiB0fWZ1bmN0aW9uIG9vKHIsZSl7dmFyIHQ9e2RlZmF1bHROb3RlSWRzOltdfTtmb3IobGV0IG4gb2YgZS5lbGVtZW50cyhyKSlzd2l0Y2gobi5sb2NhbE5hbWUpe2Nhc2UibnVtRm10Ijp0Lm51bW1lcmluZ0Zvcm1hdD1lLmF0dHIobiwidmFsIik7YnJlYWs7Y2FzZSJmb290bm90ZSI6Y2FzZSJlbmRub3RlIjp0LmRlZmF1bHROb3RlSWRzLnB1c2goZS5hdHRyKG4sImlkIikpO2JyZWFrfXJldHVybiB0fWNsYXNzIFJBIGV4dGVuZHMgY3R7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlLHQpfXBhcnNlWG1sKGUpe3RoaXMuc2V0dGluZ3M9X0EoZSx0aGlzLl9wYWNrYWdlLnhtbFBhcnNlcil9fWZ1bmN0aW9uIEZBKHIsZSl7cmV0dXJuIGUuZWxlbWVudHMociwicHJvcGVydHkiKS5tYXAodD0+e2NvbnN0IG49dC5maXJzdENoaWxkO3JldHVybntmb3JtYXRJZDplLmF0dHIodCwiZm10aWQiKSxuYW1lOmUuYXR0cih0LCJuYW1lIiksdHlwZTpuLm5vZGVOYW1lLHZhbHVlOm4udGV4dENvbnRlbnR9fSl9Y2xhc3MgTUEgZXh0ZW5kcyBjdHtwYXJzZVhtbChlKXt0aGlzLnByb3BzPUZBKGUsdGhpcy5fcGFja2FnZS54bWxQYXJzZXIpfX1jbGFzcyBPQSBleHRlbmRzIGN0e2NvbnN0cnVjdG9yKGUsdCxuKXtzdXBlcihlLHQpLHRoaXMuX2RvY3VtZW50UGFyc2VyPW59cGFyc2VYbWwoZSl7dGhpcy5jb21tZW50cz10aGlzLl9kb2N1bWVudFBhcnNlci5wYXJzZUNvbW1lbnRzKGUpLHRoaXMuY29tbWVudE1hcD1qdCh0aGlzLmNvbW1lbnRzLHQ9PnQuaWQpfX1jbGFzcyBMQSBleHRlbmRzIGN0e2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSx0KSx0aGlzLmNvbW1lbnRzPVtdfXBhcnNlWG1sKGUpe2NvbnN0IHQ9dGhpcy5fcGFja2FnZS54bWxQYXJzZXI7Zm9yKGxldCBuIG9mIHQuZWxlbWVudHMoZSwiY29tbWVudEV4IikpdGhpcy5jb21tZW50cy5wdXNoKHtwYXJhSWQ6dC5hdHRyKG4sInBhcmFJZCIpLHBhcmFJZFBhcmVudDp0LmF0dHIobiwicGFyYUlkUGFyZW50IiksZG9uZTp0LmJvb2xBdHRyKG4sImRvbmUiKX0pO3RoaXMuY29tbWVudE1hcD1qdCh0aGlzLmNvbW1lbnRzLG49Pm4ucGFyYUlkKX19Y29uc3QgUEE9W3t0eXBlOk1lLk9mZmljZURvY3VtZW50LHRhcmdldDoid29yZC9kb2N1bWVudC54bWwifSx7dHlwZTpNZS5FeHRlbmRlZFByb3BlcnRpZXMsdGFyZ2V0OiJkb2NQcm9wcy9hcHAueG1sIn0se3R5cGU6TWUuQ29yZVByb3BlcnRpZXMsdGFyZ2V0OiJkb2NQcm9wcy9jb3JlLnhtbCJ9LHt0eXBlOk1lLkN1c3RvbVByb3BlcnRpZXMsdGFyZ2V0OiJkb2NQcm9wcy9jdXN0b20ueG1sIn1dO2NsYXNzIHNpe2NvbnN0cnVjdG9yKCl7dGhpcy5wYXJ0cz1bXSx0aGlzLnBhcnRzTWFwPXt9fXN0YXRpYyBhc3luYyBsb2FkKGUsdCxuKXt2YXIgcz1uZXcgc2k7cmV0dXJuIHMuX29wdGlvbnM9bixzLl9wYXJzZXI9dCxzLl9wYWNrYWdlPWF3YWl0IHJpLmxvYWQoZSxuKSxzLnJlbHM9YXdhaXQgcy5fcGFja2FnZS5sb2FkUmVsYXRpb25zaGlwcygpLGF3YWl0IFByb21pc2UuYWxsKFBBLm1hcChpPT57Y29uc3QgYT1zLnJlbHMuZmluZChvPT5vLnR5cGU9PT1pLnR5cGUpPz9pO3JldHVybiBzLmxvYWRSZWxhdGlvbnNoaXBQYXJ0KGEudGFyZ2V0LGEudHlwZSl9KSksc31zYXZlKGU9ImJsb2IiKXtyZXR1cm4gdGhpcy5fcGFja2FnZS5zYXZlKGUpfWFzeW5jIGxvYWRSZWxhdGlvbnNoaXBQYXJ0KGUsdCl7aWYodGhpcy5wYXJ0c01hcFtlXSlyZXR1cm4gdGhpcy5wYXJ0c01hcFtlXTtpZighdGhpcy5fcGFja2FnZS5nZXQoZSkpcmV0dXJuIG51bGw7bGV0IG49bnVsbDtzd2l0Y2godCl7Y2FzZSBNZS5PZmZpY2VEb2N1bWVudDp0aGlzLmRvY3VtZW50UGFydD1uPW5ldyBlQSh0aGlzLl9wYWNrYWdlLGUsdGhpcy5fcGFyc2VyKTticmVhaztjYXNlIE1lLkZvbnRUYWJsZTp0aGlzLmZvbnRUYWJsZVBhcnQ9bj1uZXcgWGgodGhpcy5fcGFja2FnZSxlKTticmVhaztjYXNlIE1lLk51bWJlcmluZzp0aGlzLm51bWJlcmluZ1BhcnQ9bj1uZXcgZEEodGhpcy5fcGFja2FnZSxlLHRoaXMuX3BhcnNlcik7YnJlYWs7Y2FzZSBNZS5TdHlsZXM6dGhpcy5zdHlsZXNQYXJ0PW49bmV3IGZBKHRoaXMuX3BhY2thZ2UsZSx0aGlzLl9wYXJzZXIpO2JyZWFrO2Nhc2UgTWUuVGhlbWU6dGhpcy50aGVtZVBhcnQ9bj1uZXcgTkEodGhpcy5fcGFja2FnZSxlKTticmVhaztjYXNlIE1lLkZvb3Rub3Rlczp0aGlzLmZvb3Rub3Rlc1BhcnQ9bj1uZXcgVEEodGhpcy5fcGFja2FnZSxlLHRoaXMuX3BhcnNlcik7YnJlYWs7Y2FzZSBNZS5FbmRub3Rlczp0aGlzLmVuZG5vdGVzUGFydD1uPW5ldyBCQSh0aGlzLl9wYWNrYWdlLGUsdGhpcy5fcGFyc2VyKTticmVhaztjYXNlIE1lLkZvb3RlcjpuPW5ldyBiQSh0aGlzLl9wYWNrYWdlLGUsdGhpcy5fcGFyc2VyKTticmVhaztjYXNlIE1lLkhlYWRlcjpuPW5ldyBtQSh0aGlzLl9wYWNrYWdlLGUsdGhpcy5fcGFyc2VyKTticmVhaztjYXNlIE1lLkNvcmVQcm9wZXJ0aWVzOnRoaXMuY29yZVByb3BzUGFydD1uPW5ldyB5QSh0aGlzLl9wYWNrYWdlLGUpO2JyZWFrO2Nhc2UgTWUuRXh0ZW5kZWRQcm9wZXJ0aWVzOnRoaXMuZXh0ZW5kZWRQcm9wc1BhcnQ9bj1uZXcgU0EodGhpcy5fcGFja2FnZSxlKTticmVhaztjYXNlIE1lLkN1c3RvbVByb3BlcnRpZXM6bj1uZXcgTUEodGhpcy5fcGFja2FnZSxlKTticmVhaztjYXNlIE1lLlNldHRpbmdzOnRoaXMuc2V0dGluZ3NQYXJ0PW49bmV3IFJBKHRoaXMuX3BhY2thZ2UsZSk7YnJlYWs7Y2FzZSBNZS5Db21tZW50czp0aGlzLmNvbW1lbnRzUGFydD1uPW5ldyBPQSh0aGlzLl9wYWNrYWdlLGUsdGhpcy5fcGFyc2VyKTticmVhaztjYXNlIE1lLkNvbW1lbnRzRXh0ZW5kZWQ6dGhpcy5jb21tZW50c0V4dGVuZGVkUGFydD1uPW5ldyBMQSh0aGlzLl9wYWNrYWdlLGUpO2JyZWFrfWlmKG49PW51bGwpcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtpZih0aGlzLnBhcnRzTWFwW2VdPW4sdGhpcy5wYXJ0cy5wdXNoKG4pLGF3YWl0IG4ubG9hZCgpLG4ucmVscz8ubGVuZ3RoPjApe2NvbnN0W3NdPUtuKG4ucGF0aCk7YXdhaXQgUHJvbWlzZS5hbGwobi5yZWxzLm1hcChpPT50aGlzLmxvYWRSZWxhdGlvbnNoaXBQYXJ0KGVpKGkudGFyZ2V0LHMpLGkudHlwZSkpKX1yZXR1cm4gbn1hc3luYyBsb2FkRG9jdW1lbnRJbWFnZShlLHQpe2NvbnN0IG49YXdhaXQgdGhpcy5sb2FkUmVzb3VyY2UodD8/dGhpcy5kb2N1bWVudFBhcnQsZSwiYmxvYiIpO3JldHVybiB0aGlzLmJsb2JUb1VSTChuKX1hc3luYyBsb2FkTnVtYmVyaW5nSW1hZ2UoZSl7Y29uc3QgdD1hd2FpdCB0aGlzLmxvYWRSZXNvdXJjZSh0aGlzLm51bWJlcmluZ1BhcnQsZSwiYmxvYiIpO3JldHVybiB0aGlzLmJsb2JUb1VSTCh0KX1hc3luYyBsb2FkRm9udChlLHQpe2NvbnN0IG49YXdhaXQgdGhpcy5sb2FkUmVzb3VyY2UodGhpcy5mb250VGFibGVQYXJ0LGUsInVpbnQ4YXJyYXkiKTtyZXR1cm4gbiYmdGhpcy5ibG9iVG9VUkwobmV3IEJsb2IoW1VBKG4sdCldKSl9YXN5bmMgbG9hZEFsdENodW5rKGUsdCl7cmV0dXJuIGF3YWl0IHRoaXMubG9hZFJlc291cmNlKHQ/P3RoaXMuZG9jdW1lbnRQYXJ0LGUsInN0cmluZyIpfWJsb2JUb1VSTChlKXtyZXR1cm4gZT90aGlzLl9vcHRpb25zLnVzZUJhc2U2NFVSTD9HaChlKTpVUkwuY3JlYXRlT2JqZWN0VVJMKGUpOm51bGx9ZmluZFBhcnRCeVJlbElkKGUsdD1udWxsKXt2YXIgbj0odC5yZWxzPz90aGlzLnJlbHMpLmZpbmQoaT0+aS5pZD09ZSk7Y29uc3Qgcz10P0tuKHQucGF0aClbMF06IiI7cmV0dXJuIG4/dGhpcy5wYXJ0c01hcFtlaShuLnRhcmdldCxzKV06bnVsbH1nZXRQYXRoQnlJZChlLHQpe2NvbnN0IG49ZS5yZWxzLmZpbmQoaT0+aS5pZD09dCksW3NdPUtuKGUucGF0aCk7cmV0dXJuIG4/ZWkobi50YXJnZXQscyk6bnVsbH1sb2FkUmVzb3VyY2UoZSx0LG4pe2NvbnN0IHM9dGhpcy5nZXRQYXRoQnlJZChlLHQpO3JldHVybiBzP3RoaXMuX3BhY2thZ2UubG9hZChzLG4pOlByb21pc2UucmVzb2x2ZShudWxsKX19ZnVuY3Rpb24gVUEocixlKXtjb25zdCBuPWUucmVwbGFjZSgve3x9fC0vZywiIikscz1uZXcgQXJyYXkoMTYpO2ZvcihsZXQgaT0wO2k8MTY7aSsrKXNbMTYtaS0xXT1wYXJzZUludChuLnN1YnN0cmluZyhpKjIsaSoyKzIpLDE2KTtmb3IobGV0IGk9MDtpPDMyO2krKylyW2ldPXJbaV1ec1tpJTE2XTtyZXR1cm4gcn1mdW5jdGlvbiBHQShyLGUpe3JldHVybnt0eXBlOkIuQm9va21hcmtTdGFydCxpZDplLmF0dHIociwiaWQiKSxuYW1lOmUuYXR0cihyLCJuYW1lIiksY29sRmlyc3Q6ZS5pbnRBdHRyKHIsImNvbEZpcnN0IiksY29sTGFzdDplLmludEF0dHIociwiY29sTGFzdCIpfX1mdW5jdGlvbiBIQShyLGUpe3JldHVybnt0eXBlOkIuQm9va21hcmtFbmQsaWQ6ZS5hdHRyKHIsImlkIil9fWNsYXNzIFFBIGV4dGVuZHMgY3J7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMudHlwZT1CLlZtbEVsZW1lbnQsdGhpcy5hdHRycz17fX19ZnVuY3Rpb24gdW8ocixlKXt2YXIgdD1uZXcgUUE7c3dpdGNoKHIubG9jYWxOYW1lKXtjYXNlInJlY3QiOnQudGFnTmFtZT0icmVjdCIsT2JqZWN0LmFzc2lnbih0LmF0dHJzLHt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIn0pO2JyZWFrO2Nhc2Uib3ZhbCI6dC50YWdOYW1lPSJlbGxpcHNlIixPYmplY3QuYXNzaWduKHQuYXR0cnMse2N4OiI1MCUiLGN5OiI1MCUiLHJ4OiI1MCUiLHJ5OiI1MCUifSk7YnJlYWs7Y2FzZSJsaW5lIjp0LnRhZ05hbWU9ImxpbmUiO2JyZWFrO2Nhc2Uic2hhcGUiOnQudGFnTmFtZT0iZyI7YnJlYWs7Y2FzZSJ0ZXh0Ym94Ijp0LnRhZ05hbWU9ImZvcmVpZ25PYmplY3QiLE9iamVjdC5hc3NpZ24odC5hdHRycyx7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9KTticmVhaztkZWZhdWx0OnJldHVybiBudWxsfWZvcihjb25zdCBuIG9mIEQuYXR0cnMocikpc3dpdGNoKG4ubG9jYWxOYW1lKXtjYXNlInN0eWxlIjp0LmNzc1N0eWxlVGV4dD1uLnZhbHVlO2JyZWFrO2Nhc2UiZmlsbGNvbG9yIjp0LmF0dHJzLmZpbGw9bi52YWx1ZTticmVhaztjYXNlImZyb20iOmNvbnN0W3MsaV09bG8obi52YWx1ZSk7T2JqZWN0LmFzc2lnbih0LmF0dHJzLHt4MTpzLHkxOml9KTticmVhaztjYXNlInRvIjpjb25zdFthLG9dPWxvKG4udmFsdWUpO09iamVjdC5hc3NpZ24odC5hdHRycyx7eDI6YSx5MjpvfSk7YnJlYWt9Zm9yKGNvbnN0IG4gb2YgRC5lbGVtZW50cyhyKSlzd2l0Y2gobi5sb2NhbE5hbWUpe2Nhc2Uic3Ryb2tlIjpPYmplY3QuYXNzaWduKHQuYXR0cnMsV0EobikpO2JyZWFrO2Nhc2UiZmlsbCI6T2JqZWN0LmFzc2lnbih0LmF0dHJzLEtBKCkpO2JyZWFrO2Nhc2UiaW1hZ2VkYXRhIjp0LnRhZ05hbWU9ImltYWdlIixPYmplY3QuYXNzaWduKHQuYXR0cnMse3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifSksdC5pbWFnZUhyZWY9e2lkOkQuYXR0cihuLCJpZCIpLHRpdGxlOkQuYXR0cihuLCJ0aXRsZSIpfTticmVhaztjYXNlInR4YnhDb250ZW50Ijp0LmNoaWxkcmVuLnB1c2goLi4uZS5wYXJzZUJvZHlFbGVtZW50cyhuKSk7YnJlYWs7ZGVmYXVsdDpjb25zdCBzPXVvKG4sZSk7cyYmdC5jaGlsZHJlbi5wdXNoKHMpO2JyZWFrfXJldHVybiB0fWZ1bmN0aW9uIFdBKHIpe3JldHVybntzdHJva2U6RC5hdHRyKHIsImNvbG9yIiksInN0cm9rZS13aWR0aCI6RC5sZW5ndGhBdHRyKHIsIndlaWdodCIsR2UuRW11KT8/IjFweCJ9fWZ1bmN0aW9uIEtBKHIpe3JldHVybnt9fWZ1bmN0aW9uIGxvKHIpe3JldHVybiByLnNwbGl0KCIsIil9Y2xhc3MgWUEgZXh0ZW5kcyBjcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy50eXBlPUIuQ29tbWVudH19Y2xhc3MgWkEgZXh0ZW5kcyBjcntjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMuaWQ9ZSx0aGlzLnR5cGU9Qi5Db21tZW50UmVmZXJlbmNlfX1jbGFzcyBWQSBleHRlbmRzIGNye2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5pZD1lLHRoaXMudHlwZT1CLkNvbW1lbnRSYW5nZVN0YXJ0fX1jbGFzcyB6QSBleHRlbmRzIGNye2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5pZD1lLHRoaXMudHlwZT1CLkNvbW1lbnRSYW5nZUVuZH19dmFyIFZuPXtzaGQ6ImluaGVyaXQiLGNvbG9yOiJibGFjayIsYm9yZGVyQ29sb3I6ImJsYWNrIixoaWdobGlnaHQ6InRyYW5zcGFyZW50In07Y29uc3QgSkE9W10sY289e29NYXRoOkIuTW1sTWF0aCxvTWF0aFBhcmE6Qi5NbWxNYXRoUGFyYWdyYXBoLGY6Qi5NbWxGcmFjdGlvbixmdW5jOkIuTW1sRnVuY3Rpb24sZk5hbWU6Qi5NbWxGdW5jdGlvbk5hbWUsbnVtOkIuTW1sTnVtZXJhdG9yLGRlbjpCLk1tbERlbm9taW5hdG9yLHJhZDpCLk1tbFJhZGljYWwsZGVnOkIuTW1sRGVncmVlLGU6Qi5NbWxCYXNlLHNTdXA6Qi5NbWxTdXBlcnNjcmlwdCxzU3ViOkIuTW1sU3Vic2NyaXB0LHNQcmU6Qi5NbWxQcmVTdWJTdXBlcixzdXA6Qi5NbWxTdXBlckFyZ3VtZW50LHN1YjpCLk1tbFN1YkFyZ3VtZW50LGQ6Qi5NbWxEZWxpbWl0ZXIsbmFyeTpCLk1tbE5hcnksZXFBcnI6Qi5NbWxFcXVhdGlvbkFycmF5LGxpbTpCLk1tbExpbWl0LGxpbUxvdzpCLk1tbExpbWl0TG93ZXIsbTpCLk1tbE1hdHJpeCxtcjpCLk1tbE1hdHJpeFJvdyxib3g6Qi5NbWxCb3gsYmFyOkIuTW1sQmFyLGdyb3VwQ2hyOkIuTW1sR3JvdXBDaGFyfTtjbGFzcyBxQXtjb25zdHJ1Y3RvcihlKXt0aGlzLm9wdGlvbnM9e2lnbm9yZVdpZHRoOiExLGRlYnVnOiExLC4uLmV9fXBhcnNlTm90ZXMoZSx0LG4pe3ZhciBzPVtdO2ZvcihsZXQgaSBvZiBELmVsZW1lbnRzKGUsdCkpe2NvbnN0IGE9bmV3IG47YS5pZD1ELmF0dHIoaSwiaWQiKSxhLm5vdGVUeXBlPUQuYXR0cihpLCJ0eXBlIiksYS5jaGlsZHJlbj10aGlzLnBhcnNlQm9keUVsZW1lbnRzKGkpLHMucHVzaChhKX1yZXR1cm4gc31wYXJzZUNvbW1lbnRzKGUpe3ZhciB0PVtdO2ZvcihsZXQgbiBvZiBELmVsZW1lbnRzKGUsImNvbW1lbnQiKSl7Y29uc3Qgcz1uZXcgWUE7cy5pZD1ELmF0dHIobiwiaWQiKSxzLmF1dGhvcj1ELmF0dHIobiwiYXV0aG9yIikscy5pbml0aWFscz1ELmF0dHIobiwiaW5pdGlhbHMiKSxzLmRhdGU9RC5hdHRyKG4sImRhdGUiKSxzLmNoaWxkcmVuPXRoaXMucGFyc2VCb2R5RWxlbWVudHMobiksdC5wdXNoKHMpfXJldHVybiB0fXBhcnNlRG9jdW1lbnRGaWxlKGUpe3ZhciB0PUQuZWxlbWVudChlLCJib2R5Iiksbj1ELmVsZW1lbnQoZSwiYmFja2dyb3VuZCIpLHM9RC5lbGVtZW50KHQsInNlY3RQciIpO3JldHVybnt0eXBlOkIuRG9jdW1lbnQsY2hpbGRyZW46dGhpcy5wYXJzZUJvZHlFbGVtZW50cyh0KSxwcm9wczpzP1hhKHMsRCk6e30sY3NzU3R5bGU6bj90aGlzLnBhcnNlQmFja2dyb3VuZChuKTp7fX19cGFyc2VCYWNrZ3JvdW5kKGUpe3ZhciB0PXt9LG49TnIuY29sb3JBdHRyKGUsImNvbG9yIik7cmV0dXJuIG4mJih0WyJiYWNrZ3JvdW5kLWNvbG9yIl09biksdH1wYXJzZUJvZHlFbGVtZW50cyhlKXt2YXIgdD1bXTtmb3IoY29uc3QgbiBvZiBELmVsZW1lbnRzKGUpKXN3aXRjaChuLmxvY2FsTmFtZSl7Y2FzZSJwIjp0LnB1c2godGhpcy5wYXJzZVBhcmFncmFwaChuKSk7YnJlYWs7Y2FzZSJhbHRDaHVuayI6dC5wdXNoKHRoaXMucGFyc2VBbHRDaHVuayhuKSk7YnJlYWs7Y2FzZSJ0YmwiOnQucHVzaCh0aGlzLnBhcnNlVGFibGUobikpO2JyZWFrO2Nhc2Uic2R0Ijp0LnB1c2goLi4udGhpcy5wYXJzZVNkdChuLHM9PnRoaXMucGFyc2VCb2R5RWxlbWVudHMocykpKTticmVha31yZXR1cm4gdH1wYXJzZVN0eWxlc0ZpbGUoZSl7dmFyIHQ9W107Zm9yKGNvbnN0IG4gb2YgRC5lbGVtZW50cyhlKSlzd2l0Y2gobi5sb2NhbE5hbWUpe2Nhc2Uic3R5bGUiOnQucHVzaCh0aGlzLnBhcnNlU3R5bGUobikpO2JyZWFrO2Nhc2UiZG9jRGVmYXVsdHMiOnQucHVzaCh0aGlzLnBhcnNlRGVmYXVsdFN0eWxlcyhuKSk7YnJlYWt9cmV0dXJuIHR9cGFyc2VEZWZhdWx0U3R5bGVzKGUpe3ZhciB0PXtpZDpudWxsLG5hbWU6bnVsbCx0YXJnZXQ6bnVsbCxiYXNlZE9uOm51bGwsc3R5bGVzOltdfTtmb3IoY29uc3QgaSBvZiBELmVsZW1lbnRzKGUpKXN3aXRjaChpLmxvY2FsTmFtZSl7Y2FzZSJyUHJEZWZhdWx0Ijp2YXIgbj1ELmVsZW1lbnQoaSwiclByIik7biYmdC5zdHlsZXMucHVzaCh7dGFyZ2V0OiJzcGFuIix2YWx1ZXM6dGhpcy5wYXJzZURlZmF1bHRQcm9wZXJ0aWVzKG4se30pfSk7YnJlYWs7Y2FzZSJwUHJEZWZhdWx0Ijp2YXIgcz1ELmVsZW1lbnQoaSwicFByIik7cyYmdC5zdHlsZXMucHVzaCh7dGFyZ2V0OiJwIix2YWx1ZXM6dGhpcy5wYXJzZURlZmF1bHRQcm9wZXJ0aWVzKHMse30pfSk7YnJlYWt9cmV0dXJuIHR9cGFyc2VTdHlsZShlKXt2YXIgdD17aWQ6RC5hdHRyKGUsInN0eWxlSWQiKSxpc0RlZmF1bHQ6RC5ib29sQXR0cihlLCJkZWZhdWx0IiksbmFtZTpudWxsLHRhcmdldDpudWxsLGJhc2VkT246bnVsbCxzdHlsZXM6W10sbGlua2VkOm51bGx9O3N3aXRjaChELmF0dHIoZSwidHlwZSIpKXtjYXNlInBhcmFncmFwaCI6dC50YXJnZXQ9InAiO2JyZWFrO2Nhc2UidGFibGUiOnQudGFyZ2V0PSJ0YWJsZSI7YnJlYWs7Y2FzZSJjaGFyYWN0ZXIiOnQudGFyZ2V0PSJzcGFuIjticmVha31mb3IoY29uc3QgbiBvZiBELmVsZW1lbnRzKGUpKXN3aXRjaChuLmxvY2FsTmFtZSl7Y2FzZSJiYXNlZE9uIjp0LmJhc2VkT249RC5hdHRyKG4sInZhbCIpO2JyZWFrO2Nhc2UibmFtZSI6dC5uYW1lPUQuYXR0cihuLCJ2YWwiKTticmVhaztjYXNlImxpbmsiOnQubGlua2VkPUQuYXR0cihuLCJ2YWwiKTticmVhaztjYXNlIm5leHQiOnQubmV4dD1ELmF0dHIobiwidmFsIik7YnJlYWs7Y2FzZSJhbGlhc2VzIjp0LmFsaWFzZXM9RC5hdHRyKG4sInZhbCIpLnNwbGl0KCIsIik7YnJlYWs7Y2FzZSJwUHIiOnQuc3R5bGVzLnB1c2goe3RhcmdldDoicCIsdmFsdWVzOnRoaXMucGFyc2VEZWZhdWx0UHJvcGVydGllcyhuLHt9KX0pLHQucGFyYWdyYXBoUHJvcHM9ZW8obixEKTticmVhaztjYXNlInJQciI6dC5zdHlsZXMucHVzaCh7dGFyZ2V0OiJzcGFuIix2YWx1ZXM6dGhpcy5wYXJzZURlZmF1bHRQcm9wZXJ0aWVzKG4se30pfSksdC5ydW5Qcm9wcz1uaShuLEQpO2JyZWFrO2Nhc2UidGJsUHIiOmNhc2UidGNQciI6dC5zdHlsZXMucHVzaCh7dGFyZ2V0OiJ0ZCIsdmFsdWVzOnRoaXMucGFyc2VEZWZhdWx0UHJvcGVydGllcyhuLHt9KX0pO2JyZWFrO2Nhc2UidGJsU3R5bGVQciI6Zm9yKGxldCBzIG9mIHRoaXMucGFyc2VUYWJsZVN0eWxlKG4pKXQuc3R5bGVzLnB1c2gocyk7YnJlYWs7Y2FzZSJyc2lkIjpjYXNlInFGb3JtYXQiOmNhc2UiaGlkZGVuIjpjYXNlInNlbWlIaWRkZW4iOmNhc2UidW5oaWRlV2hlblVzZWQiOmNhc2UiYXV0b1JlZGVmaW5lIjpjYXNlInVpUHJpb3JpdHkiOmJyZWFrO2RlZmF1bHQ6dGhpcy5vcHRpb25zLmRlYnVnJiZjb25zb2xlLndhcm4oYERPQ1g6IFVua25vd24gc3R5bGUgZWxlbWVudDogJHtuLmxvY2FsTmFtZX1gKX1yZXR1cm4gdH1wYXJzZVRhYmxlU3R5bGUoZSl7dmFyIHQ9W10sbj1ELmF0dHIoZSwidHlwZSIpLHM9IiIsaT0iIjtzd2l0Y2gobil7Y2FzZSJmaXJzdFJvdyI6aT0iLmZpcnN0LXJvdyIscz0idHIuZmlyc3Qtcm93IHRkIjticmVhaztjYXNlImxhc3RSb3ciOmk9Ii5sYXN0LXJvdyIscz0idHIubGFzdC1yb3cgdGQiO2JyZWFrO2Nhc2UiZmlyc3RDb2wiOmk9Ii5maXJzdC1jb2wiLHM9InRkLmZpcnN0LWNvbCI7YnJlYWs7Y2FzZSJsYXN0Q29sIjppPSIubGFzdC1jb2wiLHM9InRkLmxhc3QtY29sIjticmVhaztjYXNlImJhbmQxVmVydCI6aT0iOm5vdCgubm8tdmJhbmQpIixzPSJ0ZC5vZGQtY29sIjticmVhaztjYXNlImJhbmQyVmVydCI6aT0iOm5vdCgubm8tdmJhbmQpIixzPSJ0ZC5ldmVuLWNvbCI7YnJlYWs7Y2FzZSJiYW5kMUhvcnoiOmk9Ijpub3QoLm5vLWhiYW5kKSIscz0idHIub2RkLXJvdyI7YnJlYWs7Y2FzZSJiYW5kMkhvcnoiOmk9Ijpub3QoLm5vLWhiYW5kKSIscz0idHIuZXZlbi1yb3ciO2JyZWFrO2RlZmF1bHQ6cmV0dXJuW119Zm9yKGNvbnN0IGEgb2YgRC5lbGVtZW50cyhlKSlzd2l0Y2goYS5sb2NhbE5hbWUpe2Nhc2UicFByIjp0LnB1c2goe3RhcmdldDpgJHtzfSBwYCxtb2Q6aSx2YWx1ZXM6dGhpcy5wYXJzZURlZmF1bHRQcm9wZXJ0aWVzKGEse30pfSk7YnJlYWs7Y2FzZSJyUHIiOnQucHVzaCh7dGFyZ2V0OmAke3N9IHNwYW5gLG1vZDppLHZhbHVlczp0aGlzLnBhcnNlRGVmYXVsdFByb3BlcnRpZXMoYSx7fSl9KTticmVhaztjYXNlInRibFByIjpjYXNlInRjUHIiOnQucHVzaCh7dGFyZ2V0OnMsbW9kOmksdmFsdWVzOnRoaXMucGFyc2VEZWZhdWx0UHJvcGVydGllcyhhLHt9KX0pO2JyZWFrfXJldHVybiB0fXBhcnNlTnVtYmVyaW5nRmlsZShlKXt2YXIgdD1bXSxuPXt9LHM9W107Zm9yKGNvbnN0IG8gb2YgRC5lbGVtZW50cyhlKSlzd2l0Y2goby5sb2NhbE5hbWUpe2Nhc2UiYWJzdHJhY3ROdW0iOnRoaXMucGFyc2VBYnN0cmFjdE51bWJlcmluZyhvLHMpLmZvckVhY2godT0+dC5wdXNoKHUpKTticmVhaztjYXNlIm51bVBpY0J1bGxldCI6cy5wdXNoKHRoaXMucGFyc2VOdW1iZXJpbmdQaWNCdWxsZXQobykpO2JyZWFrO2Nhc2UibnVtIjp2YXIgaT1ELmF0dHIobywibnVtSWQiKSxhPUQuZWxlbWVudEF0dHIobywiYWJzdHJhY3ROdW1JZCIsInZhbCIpO25bYV09aTticmVha31yZXR1cm4gdC5mb3JFYWNoKG89Pm8uaWQ9bltvLmlkXSksdH1wYXJzZU51bWJlcmluZ1BpY0J1bGxldChlKXt2YXIgdD1ELmVsZW1lbnQoZSwicGljdCIpLG49dCYmRC5lbGVtZW50KHQsInNoYXBlIikscz1uJiZELmVsZW1lbnQobiwiaW1hZ2VkYXRhIik7cmV0dXJuIHM/e2lkOkQuaW50QXR0cihlLCJudW1QaWNCdWxsZXRJZCIpLHNyYzpELmF0dHIocywiaWQiKSxzdHlsZTpELmF0dHIobiwic3R5bGUiKX06bnVsbH1wYXJzZUFic3RyYWN0TnVtYmVyaW5nKGUsdCl7dmFyIG49W10scz1ELmF0dHIoZSwiYWJzdHJhY3ROdW1JZCIpO2Zvcihjb25zdCBpIG9mIEQuZWxlbWVudHMoZSkpc3dpdGNoKGkubG9jYWxOYW1lKXtjYXNlImx2bCI6bi5wdXNoKHRoaXMucGFyc2VOdW1iZXJpbmdMZXZlbChzLGksdCkpO2JyZWFrfXJldHVybiBufXBhcnNlTnVtYmVyaW5nTGV2ZWwoZSx0LG4pe3ZhciBzPXtpZDplLGxldmVsOkQuaW50QXR0cih0LCJpbHZsIiksc3RhcnQ6MSxwU3R5bGVOYW1lOnZvaWQgMCxwU3R5bGU6e30sclN0eWxlOnt9LHN1ZmY6InRhYiJ9O2Zvcihjb25zdCBhIG9mIEQuZWxlbWVudHModCkpc3dpdGNoKGEubG9jYWxOYW1lKXtjYXNlInN0YXJ0IjpzLnN0YXJ0PUQuaW50QXR0cihhLCJ2YWwiKTticmVhaztjYXNlInBQciI6dGhpcy5wYXJzZURlZmF1bHRQcm9wZXJ0aWVzKGEscy5wU3R5bGUpO2JyZWFrO2Nhc2UiclByIjp0aGlzLnBhcnNlRGVmYXVsdFByb3BlcnRpZXMoYSxzLnJTdHlsZSk7YnJlYWs7Y2FzZSJsdmxQaWNCdWxsZXRJZCI6dmFyIGk9RC5pbnRBdHRyKGEsInZhbCIpO3MuYnVsbGV0PW4uZmluZChvPT5vPy5pZD09aSk7YnJlYWs7Y2FzZSJsdmxUZXh0IjpzLmxldmVsVGV4dD1ELmF0dHIoYSwidmFsIik7YnJlYWs7Y2FzZSJwU3R5bGUiOnMucFN0eWxlTmFtZT1ELmF0dHIoYSwidmFsIik7YnJlYWs7Y2FzZSJudW1GbXQiOnMuZm9ybWF0PUQuYXR0cihhLCJ2YWwiKTticmVhaztjYXNlInN1ZmYiOnMuc3VmZj1ELmF0dHIoYSwidmFsIik7YnJlYWt9cmV0dXJuIHN9cGFyc2VTZHQoZSx0KXtjb25zdCBuPUQuZWxlbWVudChlLCJzZHRDb250ZW50Iik7cmV0dXJuIG4/dChuKTpbXX1wYXJzZUluc2VydGVkKGUsdCl7cmV0dXJue3R5cGU6Qi5JbnNlcnRlZCxjaGlsZHJlbjp0KGUpPy5jaGlsZHJlbj8/W119fXBhcnNlRGVsZXRlZChlLHQpe3JldHVybnt0eXBlOkIuRGVsZXRlZCxjaGlsZHJlbjp0KGUpPy5jaGlsZHJlbj8/W119fXBhcnNlQWx0Q2h1bmsoZSl7cmV0dXJue3R5cGU6Qi5BbHRDaHVuayxjaGlsZHJlbjpbXSxpZDpELmF0dHIoZSwiaWQiKX19cGFyc2VQYXJhZ3JhcGgoZSl7dmFyIHQ9e3R5cGU6Qi5QYXJhZ3JhcGgsY2hpbGRyZW46W119O2ZvcihsZXQgbiBvZiBELmVsZW1lbnRzKGUpKXN3aXRjaChuLmxvY2FsTmFtZSl7Y2FzZSJwUHIiOnRoaXMucGFyc2VQYXJhZ3JhcGhQcm9wZXJ0aWVzKG4sdCk7YnJlYWs7Y2FzZSJyIjp0LmNoaWxkcmVuLnB1c2godGhpcy5wYXJzZVJ1bihuLHQpKTticmVhaztjYXNlImh5cGVybGluayI6dC5jaGlsZHJlbi5wdXNoKHRoaXMucGFyc2VIeXBlcmxpbmsobix0KSk7YnJlYWs7Y2FzZSJzbWFydFRhZyI6dC5jaGlsZHJlbi5wdXNoKHRoaXMucGFyc2VTbWFydFRhZyhuLHQpKTticmVhaztjYXNlImJvb2ttYXJrU3RhcnQiOnQuY2hpbGRyZW4ucHVzaChHQShuLEQpKTticmVhaztjYXNlImJvb2ttYXJrRW5kIjp0LmNoaWxkcmVuLnB1c2goSEEobixEKSk7YnJlYWs7Y2FzZSJjb21tZW50UmFuZ2VTdGFydCI6dC5jaGlsZHJlbi5wdXNoKG5ldyBWQShELmF0dHIobiwiaWQiKSkpO2JyZWFrO2Nhc2UiY29tbWVudFJhbmdlRW5kIjp0LmNoaWxkcmVuLnB1c2gobmV3IHpBKEQuYXR0cihuLCJpZCIpKSk7YnJlYWs7Y2FzZSJvTWF0aCI6Y2FzZSJvTWF0aFBhcmEiOnQuY2hpbGRyZW4ucHVzaCh0aGlzLnBhcnNlTWF0aEVsZW1lbnQobikpO2JyZWFrO2Nhc2Uic2R0Ijp0LmNoaWxkcmVuLnB1c2goLi4udGhpcy5wYXJzZVNkdChuLHM9PnRoaXMucGFyc2VQYXJhZ3JhcGgocykuY2hpbGRyZW4pKTticmVhaztjYXNlImlucyI6dC5jaGlsZHJlbi5wdXNoKHRoaXMucGFyc2VJbnNlcnRlZChuLHM9PnRoaXMucGFyc2VQYXJhZ3JhcGgocykpKTticmVhaztjYXNlImRlbCI6dC5jaGlsZHJlbi5wdXNoKHRoaXMucGFyc2VEZWxldGVkKG4scz0+dGhpcy5wYXJzZVBhcmFncmFwaChzKSkpO2JyZWFrfXJldHVybiB0fXBhcnNlUGFyYWdyYXBoUHJvcGVydGllcyhlLHQpe3RoaXMucGFyc2VEZWZhdWx0UHJvcGVydGllcyhlLHQuY3NzU3R5bGU9e30sbnVsbCxuPT57aWYodG8obix0LEQpKXJldHVybiEwO3N3aXRjaChuLmxvY2FsTmFtZSl7Y2FzZSJwU3R5bGUiOnQuc3R5bGVOYW1lPUQuYXR0cihuLCJ2YWwiKTticmVhaztjYXNlImNuZlN0eWxlIjp0LmNsYXNzTmFtZT1OZS5jbGFzc05hbWVPZkNuZlN0eWxlKG4pO2JyZWFrO2Nhc2UiZnJhbWVQciI6dGhpcy5wYXJzZUZyYW1lKG4sdCk7YnJlYWs7Y2FzZSJyUHIiOmJyZWFrO2RlZmF1bHQ6cmV0dXJuITF9cmV0dXJuITB9KX1wYXJzZUZyYW1lKGUsdCl7dmFyIG49RC5hdHRyKGUsImRyb3BDYXAiKTtuPT0iZHJvcCImJih0LmNzc1N0eWxlLmZsb2F0PSJsZWZ0Iil9cGFyc2VIeXBlcmxpbmsoZSx0KXt2YXIgbj17dHlwZTpCLkh5cGVybGluayxwYXJlbnQ6dCxjaGlsZHJlbjpbXX07bi5hbmNob3I9RC5hdHRyKGUsImFuY2hvciIpLG4uaWQ9RC5hdHRyKGUsImlkIik7Zm9yKGNvbnN0IHMgb2YgRC5lbGVtZW50cyhlKSlzd2l0Y2gocy5sb2NhbE5hbWUpe2Nhc2UiciI6bi5jaGlsZHJlbi5wdXNoKHRoaXMucGFyc2VSdW4ocyxuKSk7YnJlYWt9cmV0dXJuIG59cGFyc2VTbWFydFRhZyhlLHQpe3ZhciBuPXt0eXBlOkIuU21hcnRUYWcscGFyZW50OnQsY2hpbGRyZW46W119LHM9RC5hdHRyKGUsInVyaSIpLGk9RC5hdHRyKGUsImVsZW1lbnQiKTtzJiYobi51cmk9cyksaSYmKG4uZWxlbWVudD1pKTtmb3IoY29uc3QgYSBvZiBELmVsZW1lbnRzKGUpKXN3aXRjaChhLmxvY2FsTmFtZSl7Y2FzZSJyIjpuLmNoaWxkcmVuLnB1c2godGhpcy5wYXJzZVJ1bihhLG4pKTticmVha31yZXR1cm4gbn1wYXJzZVJ1bihlLHQpe3ZhciBuPXt0eXBlOkIuUnVuLHBhcmVudDp0LGNoaWxkcmVuOltdfTtmb3IobGV0IHMgb2YgRC5lbGVtZW50cyhlKSlzd2l0Y2gocz10aGlzLmNoZWNrQWx0ZXJuYXRlQ29udGVudChzKSxzLmxvY2FsTmFtZSl7Y2FzZSJ0IjpuLmNoaWxkcmVuLnB1c2goe3R5cGU6Qi5UZXh0LHRleHQ6cy50ZXh0Q29udGVudH0pO2JyZWFrO2Nhc2UiZGVsVGV4dCI6bi5jaGlsZHJlbi5wdXNoKHt0eXBlOkIuRGVsZXRlZFRleHQsdGV4dDpzLnRleHRDb250ZW50fSk7YnJlYWs7Y2FzZSJjb21tZW50UmVmZXJlbmNlIjpuLmNoaWxkcmVuLnB1c2gobmV3IFpBKEQuYXR0cihzLCJpZCIpKSk7YnJlYWs7Y2FzZSJmbGRTaW1wbGUiOm4uY2hpbGRyZW4ucHVzaCh7dHlwZTpCLlNpbXBsZUZpZWxkLGluc3RydWN0aW9uOkQuYXR0cihzLCJpbnN0ciIpLGxvY2s6RC5ib29sQXR0cihzLCJsb2NrIiwhMSksZGlydHk6RC5ib29sQXR0cihzLCJkaXJ0eSIsITEpfSk7YnJlYWs7Y2FzZSJpbnN0clRleHQiOm4uZmllbGRSdW49ITAsbi5jaGlsZHJlbi5wdXNoKHt0eXBlOkIuSW5zdHJ1Y3Rpb24sdGV4dDpzLnRleHRDb250ZW50fSk7YnJlYWs7Y2FzZSJmbGRDaGFyIjpuLmZpZWxkUnVuPSEwLG4uY2hpbGRyZW4ucHVzaCh7dHlwZTpCLkNvbXBsZXhGaWVsZCxjaGFyVHlwZTpELmF0dHIocywiZmxkQ2hhclR5cGUiKSxsb2NrOkQuYm9vbEF0dHIocywibG9jayIsITEpLGRpcnR5OkQuYm9vbEF0dHIocywiZGlydHkiLCExKX0pO2JyZWFrO2Nhc2Uibm9CcmVha0h5cGhlbiI6bi5jaGlsZHJlbi5wdXNoKHt0eXBlOkIuTm9CcmVha0h5cGhlbn0pO2JyZWFrO2Nhc2UiYnIiOm4uY2hpbGRyZW4ucHVzaCh7dHlwZTpCLkJyZWFrLGJyZWFrOkQuYXR0cihzLCJ0eXBlIil8fCJ0ZXh0V3JhcHBpbmcifSk7YnJlYWs7Y2FzZSJsYXN0UmVuZGVyZWRQYWdlQnJlYWsiOm4uY2hpbGRyZW4ucHVzaCh7dHlwZTpCLkJyZWFrLGJyZWFrOiJsYXN0UmVuZGVyZWRQYWdlQnJlYWsifSk7YnJlYWs7Y2FzZSJzeW0iOm4uY2hpbGRyZW4ucHVzaCh7dHlwZTpCLlN5bWJvbCxmb250OiRzKEQuYXR0cihzLCJmb250IikpLGNoYXI6RC5hdHRyKHMsImNoYXIiKX0pO2JyZWFrO2Nhc2UidGFiIjpuLmNoaWxkcmVuLnB1c2goe3R5cGU6Qi5UYWJ9KTticmVhaztjYXNlImZvb3Rub3RlUmVmZXJlbmNlIjpuLmNoaWxkcmVuLnB1c2goe3R5cGU6Qi5Gb290bm90ZVJlZmVyZW5jZSxpZDpELmF0dHIocywiaWQiKX0pO2JyZWFrO2Nhc2UiZW5kbm90ZVJlZmVyZW5jZSI6bi5jaGlsZHJlbi5wdXNoKHt0eXBlOkIuRW5kbm90ZVJlZmVyZW5jZSxpZDpELmF0dHIocywiaWQiKX0pO2JyZWFrO2Nhc2UiZHJhd2luZyI6bGV0IGk9dGhpcy5wYXJzZURyYXdpbmcocyk7aSYmKG4uY2hpbGRyZW49W2ldKTticmVhaztjYXNlInBpY3QiOm4uY2hpbGRyZW4ucHVzaCh0aGlzLnBhcnNlVm1sUGljdHVyZShzKSk7YnJlYWs7Y2FzZSJyUHIiOnRoaXMucGFyc2VSdW5Qcm9wZXJ0aWVzKHMsbik7YnJlYWt9cmV0dXJuIG59cGFyc2VNYXRoRWxlbWVudChlKXtjb25zdCB0PWAke2UubG9jYWxOYW1lfVByYCxuPXt0eXBlOmNvW2UubG9jYWxOYW1lXSxjaGlsZHJlbjpbXX07Zm9yKGNvbnN0IGkgb2YgRC5lbGVtZW50cyhlKSlpZihjb1tpLmxvY2FsTmFtZV0pbi5jaGlsZHJlbi5wdXNoKHRoaXMucGFyc2VNYXRoRWxlbWVudChpKSk7ZWxzZSBpZihpLmxvY2FsTmFtZT09InIiKXt2YXIgcz10aGlzLnBhcnNlUnVuKGkpO3MudHlwZT1CLk1tbFJ1bixuLmNoaWxkcmVuLnB1c2gocyl9ZWxzZSBpLmxvY2FsTmFtZT09dCYmKG4ucHJvcHM9dGhpcy5wYXJzZU1hdGhQcm9wZXJpZXMoaSkpO3JldHVybiBufXBhcnNlTWF0aFByb3BlcmllcyhlKXtjb25zdCB0PXt9O2Zvcihjb25zdCBuIG9mIEQuZWxlbWVudHMoZSkpc3dpdGNoKG4ubG9jYWxOYW1lKXtjYXNlImNociI6dC5jaGFyPUQuYXR0cihuLCJ2YWwiKTticmVhaztjYXNlInZlcnRKYyI6dC52ZXJ0aWNhbEp1c3RpZmljYXRpb249RC5hdHRyKG4sInZhbCIpO2JyZWFrO2Nhc2UicG9zIjp0LnBvc2l0aW9uPUQuYXR0cihuLCJ2YWwiKTticmVhaztjYXNlImRlZ0hpZGUiOnQuaGlkZURlZ3JlZT1ELmJvb2xBdHRyKG4sInZhbCIpO2JyZWFrO2Nhc2UiYmVnQ2hyIjp0LmJlZ2luQ2hhcj1ELmF0dHIobiwidmFsIik7YnJlYWs7Y2FzZSJlbmRDaHIiOnQuZW5kQ2hhcj1ELmF0dHIobiwidmFsIik7YnJlYWt9cmV0dXJuIHR9cGFyc2VSdW5Qcm9wZXJ0aWVzKGUsdCl7dGhpcy5wYXJzZURlZmF1bHRQcm9wZXJ0aWVzKGUsdC5jc3NTdHlsZT17fSxudWxsLG49Pntzd2l0Y2gobi5sb2NhbE5hbWUpe2Nhc2UiclN0eWxlIjp0LnN0eWxlTmFtZT1ELmF0dHIobiwidmFsIik7YnJlYWs7Y2FzZSJ2ZXJ0QWxpZ24iOnQudmVydGljYWxBbGlnbj1OZS52YWx1ZU9mVmVydEFsaWduKG4sITApO2JyZWFrO2RlZmF1bHQ6cmV0dXJuITF9cmV0dXJuITB9KX1wYXJzZVZtbFBpY3R1cmUoZSl7Y29uc3QgdD17dHlwZTpCLlZtbFBpY3R1cmUsY2hpbGRyZW46W119O2Zvcihjb25zdCBuIG9mIEQuZWxlbWVudHMoZSkpe2NvbnN0IHM9dW8obix0aGlzKTtzJiZ0LmNoaWxkcmVuLnB1c2gocyl9cmV0dXJuIHR9Y2hlY2tBbHRlcm5hdGVDb250ZW50KGUpe2lmKGUubG9jYWxOYW1lIT0iQWx0ZXJuYXRlQ29udGVudCIpcmV0dXJuIGU7dmFyIHQ9RC5lbGVtZW50KGUsIkNob2ljZSIpO2lmKHQpe3ZhciBuPUQuYXR0cih0LCJSZXF1aXJlcyIpLHM9ZS5sb29rdXBOYW1lc3BhY2VVUkkobik7aWYoSkEuaW5jbHVkZXMocykpcmV0dXJuIHQuZmlyc3RFbGVtZW50Q2hpbGR9cmV0dXJuIEQuZWxlbWVudChlLCJGYWxsYmFjayIpPy5maXJzdEVsZW1lbnRDaGlsZH1wYXJzZURyYXdpbmcoZSl7Zm9yKHZhciB0IG9mIEQuZWxlbWVudHMoZSkpc3dpdGNoKHQubG9jYWxOYW1lKXtjYXNlImlubGluZSI6Y2FzZSJhbmNob3IiOnJldHVybiB0aGlzLnBhcnNlRHJhd2luZ1dyYXBwZXIodCl9fXBhcnNlRHJhd2luZ1dyYXBwZXIoZSl7dmFyIHQ9e3R5cGU6Qi5EcmF3aW5nLGNoaWxkcmVuOltdLGNzc1N0eWxlOnt9fSxuPWUubG9jYWxOYW1lPT0iYW5jaG9yIjtsZXQgcz1udWxsLGk9RC5ib29sQXR0cihlLCJzaW1wbGVQb3MiKTtELmJvb2xBdHRyKGUsImJlaGluZERvYyIpO2xldCBhPXtyZWxhdGl2ZToicGFnZSIsYWxpZ246ImxlZnQiLG9mZnNldDoiMCJ9LG89e3JlbGF0aXZlOiJwYWdlIixhbGlnbjoidG9wIixvZmZzZXQ6IjAifTtmb3IodmFyIHUgb2YgRC5lbGVtZW50cyhlKSlzd2l0Y2godS5sb2NhbE5hbWUpe2Nhc2Uic2ltcGxlUG9zIjppJiYoYS5vZmZzZXQ9RC5sZW5ndGhBdHRyKHUsIngiLEdlLkVtdSksby5vZmZzZXQ9RC5sZW5ndGhBdHRyKHUsInkiLEdlLkVtdSkpO2JyZWFrO2Nhc2UiZXh0ZW50Ijp0LmNzc1N0eWxlLndpZHRoPUQubGVuZ3RoQXR0cih1LCJjeCIsR2UuRW11KSx0LmNzc1N0eWxlLmhlaWdodD1ELmxlbmd0aEF0dHIodSwiY3kiLEdlLkVtdSk7YnJlYWs7Y2FzZSJwb3NpdGlvbkgiOmNhc2UicG9zaXRpb25WIjppZighaSl7bGV0IGc9dS5sb2NhbE5hbWU9PSJwb3NpdGlvbkgiP2E6bzt2YXIgbD1ELmVsZW1lbnQodSwiYWxpZ24iKSxBPUQuZWxlbWVudCh1LCJwb3NPZmZzZXQiKTtnLnJlbGF0aXZlPUQuYXR0cih1LCJyZWxhdGl2ZUZyb20iKT8/Zy5yZWxhdGl2ZSxsJiYoZy5hbGlnbj1sLnRleHRDb250ZW50KSxBJiYoZy5vZmZzZXQ9emEoQS50ZXh0Q29udGVudCxHZS5FbXUpKX1icmVhaztjYXNlIndyYXBUb3BBbmRCb3R0b20iOnM9IndyYXBUb3BBbmRCb3R0b20iO2JyZWFrO2Nhc2Uid3JhcE5vbmUiOnM9IndyYXBOb25lIjticmVhaztjYXNlImdyYXBoaWMiOnZhciBkPXRoaXMucGFyc2VHcmFwaGljKHUpO2QmJnQuY2hpbGRyZW4ucHVzaChkKTticmVha31yZXR1cm4gcz09IndyYXBUb3BBbmRCb3R0b20iPyh0LmNzc1N0eWxlLmRpc3BsYXk9ImJsb2NrIixhLmFsaWduJiYodC5jc3NTdHlsZVsidGV4dC1hbGlnbiJdPWEuYWxpZ24sdC5jc3NTdHlsZS53aWR0aD0iMTAwJSIpKTpzPT0id3JhcE5vbmUiPyh0LmNzc1N0eWxlLmRpc3BsYXk9ImJsb2NrIix0LmNzc1N0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsdC5jc3NTdHlsZS53aWR0aD0iMHB4Iix0LmNzc1N0eWxlLmhlaWdodD0iMHB4IixhLm9mZnNldCYmKHQuY3NzU3R5bGUubGVmdD1hLm9mZnNldCksby5vZmZzZXQmJih0LmNzc1N0eWxlLnRvcD1vLm9mZnNldCkpOm4mJihhLmFsaWduPT0ibGVmdCJ8fGEuYWxpZ249PSJyaWdodCIpJiYodC5jc3NTdHlsZS5mbG9hdD1hLmFsaWduKSx0fXBhcnNlR3JhcGhpYyhlKXt2YXIgdD1ELmVsZW1lbnQoZSwiZ3JhcGhpY0RhdGEiKTtmb3IobGV0IG4gb2YgRC5lbGVtZW50cyh0KSlzd2l0Y2gobi5sb2NhbE5hbWUpe2Nhc2UicGljIjpyZXR1cm4gdGhpcy5wYXJzZVBpY3R1cmUobil9cmV0dXJuIG51bGx9cGFyc2VQaWN0dXJlKGUpe3ZhciB0PXt0eXBlOkIuSW1hZ2Usc3JjOiIiLGNzc1N0eWxlOnt9fSxuPUQuZWxlbWVudChlLCJibGlwRmlsbCIpLHM9RC5lbGVtZW50KG4sImJsaXAiKSxpPUQuZWxlbWVudChuLCJzcmNSZWN0Iik7dC5zcmM9RC5hdHRyKHMsImVtYmVkIiksaSYmKHQuc3JjUmVjdD1bRC5pbnRBdHRyKGksImwiLDApLzFlNSxELmludEF0dHIoaSwidCIsMCkvMWU1LEQuaW50QXR0cihpLCJyIiwwKS8xZTUsRC5pbnRBdHRyKGksImIiLDApLzFlNV0pO3ZhciBhPUQuZWxlbWVudChlLCJzcFByIiksbz1ELmVsZW1lbnQoYSwieGZybSIpO2lmKHQuY3NzU3R5bGUucG9zaXRpb249InJlbGF0aXZlIixvKXt0LnJvdGF0aW9uPUQuaW50QXR0cihvLCJyb3QiLDApLzZlNDtmb3IodmFyIHUgb2YgRC5lbGVtZW50cyhvKSlzd2l0Y2godS5sb2NhbE5hbWUpe2Nhc2UiZXh0Ijp0LmNzc1N0eWxlLndpZHRoPUQubGVuZ3RoQXR0cih1LCJjeCIsR2UuRW11KSx0LmNzc1N0eWxlLmhlaWdodD1ELmxlbmd0aEF0dHIodSwiY3kiLEdlLkVtdSk7YnJlYWs7Y2FzZSJvZmYiOnQuY3NzU3R5bGUubGVmdD1ELmxlbmd0aEF0dHIodSwieCIsR2UuRW11KSx0LmNzc1N0eWxlLnRvcD1ELmxlbmd0aEF0dHIodSwieSIsR2UuRW11KTticmVha319cmV0dXJuIHR9cGFyc2VUYWJsZShlKXt2YXIgdD17dHlwZTpCLlRhYmxlLGNoaWxkcmVuOltdfTtmb3IoY29uc3QgbiBvZiBELmVsZW1lbnRzKGUpKXN3aXRjaChuLmxvY2FsTmFtZSl7Y2FzZSJ0ciI6dC5jaGlsZHJlbi5wdXNoKHRoaXMucGFyc2VUYWJsZVJvdyhuKSk7YnJlYWs7Y2FzZSJ0YmxHcmlkIjp0LmNvbHVtbnM9dGhpcy5wYXJzZVRhYmxlQ29sdW1ucyhuKTticmVhaztjYXNlInRibFByIjp0aGlzLnBhcnNlVGFibGVQcm9wZXJ0aWVzKG4sdCk7YnJlYWt9cmV0dXJuIHR9cGFyc2VUYWJsZUNvbHVtbnMoZSl7dmFyIHQ9W107Zm9yKGNvbnN0IG4gb2YgRC5lbGVtZW50cyhlKSlzd2l0Y2gobi5sb2NhbE5hbWUpe2Nhc2UiZ3JpZENvbCI6dC5wdXNoKHt3aWR0aDpELmxlbmd0aEF0dHIobiwidyIpfSk7YnJlYWt9cmV0dXJuIHR9cGFyc2VUYWJsZVByb3BlcnRpZXMoZSx0KXtzd2l0Y2godC5jc3NTdHlsZT17fSx0LmNlbGxTdHlsZT17fSx0aGlzLnBhcnNlRGVmYXVsdFByb3BlcnRpZXMoZSx0LmNzc1N0eWxlLHQuY2VsbFN0eWxlLG49Pntzd2l0Y2gobi5sb2NhbE5hbWUpe2Nhc2UidGJsU3R5bGUiOnQuc3R5bGVOYW1lPUQuYXR0cihuLCJ2YWwiKTticmVhaztjYXNlInRibExvb2siOnQuY2xhc3NOYW1lPU5lLmNsYXNzTmFtZU9mdGJsTG9vayhuKTticmVhaztjYXNlInRibHBQciI6dGhpcy5wYXJzZVRhYmxlUG9zaXRpb24obix0KTticmVhaztjYXNlInRibFN0eWxlQ29sQmFuZFNpemUiOnQuY29sQmFuZFNpemU9RC5pbnRBdHRyKG4sInZhbCIpO2JyZWFrO2Nhc2UidGJsU3R5bGVSb3dCYW5kU2l6ZSI6dC5yb3dCYW5kU2l6ZT1ELmludEF0dHIobiwidmFsIik7YnJlYWs7Y2FzZSJoaWRkZW4iOnQuY3NzU3R5bGUuZGlzcGxheT0ibm9uZSI7YnJlYWs7ZGVmYXVsdDpyZXR1cm4hMX1yZXR1cm4hMH0pLHQuY3NzU3R5bGVbInRleHQtYWxpZ24iXSl7Y2FzZSJjZW50ZXIiOmRlbGV0ZSB0LmNzc1N0eWxlWyJ0ZXh0LWFsaWduIl0sdC5jc3NTdHlsZVsibWFyZ2luLWxlZnQiXT0iYXV0byIsdC5jc3NTdHlsZVsibWFyZ2luLXJpZ2h0Il09ImF1dG8iO2JyZWFrO2Nhc2UicmlnaHQiOmRlbGV0ZSB0LmNzc1N0eWxlWyJ0ZXh0LWFsaWduIl0sdC5jc3NTdHlsZVsibWFyZ2luLWxlZnQiXT0iYXV0byI7YnJlYWt9fXBhcnNlVGFibGVQb3NpdGlvbihlLHQpe3ZhciBuPUQubGVuZ3RoQXR0cihlLCJ0b3BGcm9tVGV4dCIpLHM9RC5sZW5ndGhBdHRyKGUsImJvdHRvbUZyb21UZXh0IiksaT1ELmxlbmd0aEF0dHIoZSwicmlnaHRGcm9tVGV4dCIpLGE9RC5sZW5ndGhBdHRyKGUsImxlZnRGcm9tVGV4dCIpO3QuY3NzU3R5bGUuZmxvYXQ9ImxlZnQiLHQuY3NzU3R5bGVbIm1hcmdpbi1ib3R0b20iXT1OZS5hZGRTaXplKHQuY3NzU3R5bGVbIm1hcmdpbi1ib3R0b20iXSxzKSx0LmNzc1N0eWxlWyJtYXJnaW4tbGVmdCJdPU5lLmFkZFNpemUodC5jc3NTdHlsZVsibWFyZ2luLWxlZnQiXSxhKSx0LmNzc1N0eWxlWyJtYXJnaW4tcmlnaHQiXT1OZS5hZGRTaXplKHQuY3NzU3R5bGVbIm1hcmdpbi1yaWdodCJdLGkpLHQuY3NzU3R5bGVbIm1hcmdpbi10b3AiXT1OZS5hZGRTaXplKHQuY3NzU3R5bGVbIm1hcmdpbi10b3AiXSxuKX1wYXJzZVRhYmxlUm93KGUpe3ZhciB0PXt0eXBlOkIuUm93LGNoaWxkcmVuOltdfTtmb3IoY29uc3QgbiBvZiBELmVsZW1lbnRzKGUpKXN3aXRjaChuLmxvY2FsTmFtZSl7Y2FzZSJ0YyI6dC5jaGlsZHJlbi5wdXNoKHRoaXMucGFyc2VUYWJsZUNlbGwobikpO2JyZWFrO2Nhc2UidHJQciI6Y2FzZSJ0YmxQckV4Ijp0aGlzLnBhcnNlVGFibGVSb3dQcm9wZXJ0aWVzKG4sdCk7YnJlYWt9cmV0dXJuIHR9cGFyc2VUYWJsZVJvd1Byb3BlcnRpZXMoZSx0KXt0LmNzc1N0eWxlPXRoaXMucGFyc2VEZWZhdWx0UHJvcGVydGllcyhlLHt9LG51bGwsbj0+e3N3aXRjaChuLmxvY2FsTmFtZSl7Y2FzZSJjbmZTdHlsZSI6dC5jbGFzc05hbWU9TmUuY2xhc3NOYW1lT2ZDbmZTdHlsZShuKTticmVhaztjYXNlInRibEhlYWRlciI6dC5pc0hlYWRlcj1ELmJvb2xBdHRyKG4sInZhbCIpO2JyZWFrO2Nhc2UiZ3JpZEJlZm9yZSI6dC5ncmlkQmVmb3JlPUQuaW50QXR0cihuLCJ2YWwiKTticmVhaztjYXNlImdyaWRBZnRlciI6dC5ncmlkQWZ0ZXI9RC5pbnRBdHRyKG4sInZhbCIpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuITF9cmV0dXJuITB9KX1wYXJzZVRhYmxlQ2VsbChlKXt2YXIgdD17dHlwZTpCLkNlbGwsY2hpbGRyZW46W119O2Zvcihjb25zdCBuIG9mIEQuZWxlbWVudHMoZSkpc3dpdGNoKG4ubG9jYWxOYW1lKXtjYXNlInRibCI6dC5jaGlsZHJlbi5wdXNoKHRoaXMucGFyc2VUYWJsZShuKSk7YnJlYWs7Y2FzZSJwIjp0LmNoaWxkcmVuLnB1c2godGhpcy5wYXJzZVBhcmFncmFwaChuKSk7YnJlYWs7Y2FzZSJ0Y1ByIjp0aGlzLnBhcnNlVGFibGVDZWxsUHJvcGVydGllcyhuLHQpO2JyZWFrfXJldHVybiB0fXBhcnNlVGFibGVDZWxsUHJvcGVydGllcyhlLHQpe3QuY3NzU3R5bGU9dGhpcy5wYXJzZURlZmF1bHRQcm9wZXJ0aWVzKGUse30sbnVsbCxuPT57c3dpdGNoKG4ubG9jYWxOYW1lKXtjYXNlImdyaWRTcGFuIjp0LnNwYW49RC5pbnRBdHRyKG4sInZhbCIsbnVsbCk7YnJlYWs7Y2FzZSJ2TWVyZ2UiOnQudmVydGljYWxNZXJnZT1ELmF0dHIobiwidmFsIik/PyJjb250aW51ZSI7YnJlYWs7Y2FzZSJjbmZTdHlsZSI6dC5jbGFzc05hbWU9TmUuY2xhc3NOYW1lT2ZDbmZTdHlsZShuKTticmVhaztkZWZhdWx0OnJldHVybiExfXJldHVybiEwfSksdGhpcy5wYXJzZVRhYmxlQ2VsbFZlcnRpY2FsVGV4dChlLHQpfXBhcnNlVGFibGVDZWxsVmVydGljYWxUZXh0KGUsdCl7Y29uc3Qgbj17YnRMcjp7d3JpdGluZ01vZGU6InZlcnRpY2FsLXJsIix0cmFuc2Zvcm06InJvdGF0ZSgxODBkZWcpIn0sbHJUYjp7d3JpdGluZ01vZGU6InZlcnRpY2FsLWxyIix0cmFuc2Zvcm06Im5vbmUifSx0YlJsOnt3cml0aW5nTW9kZToidmVydGljYWwtcmwiLHRyYW5zZm9ybToibm9uZSJ9fTtmb3IoY29uc3QgcyBvZiBELmVsZW1lbnRzKGUpKWlmKHMubG9jYWxOYW1lPT09InRleHREaXJlY3Rpb24iKXtjb25zdCBpPUQuYXR0cihzLCJ2YWwiKSxhPW5baV18fHt3cml0aW5nTW9kZToiaG9yaXpvbnRhbC10YiJ9O3QuY3NzU3R5bGVbIndyaXRpbmctbW9kZSJdPWEud3JpdGluZ01vZGUsdC5jc3NTdHlsZS50cmFuc2Zvcm09YS50cmFuc2Zvcm19fXBhcnNlRGVmYXVsdFByb3BlcnRpZXMoZSx0PW51bGwsbj1udWxsLHM9bnVsbCl7dD10fHx7fTtmb3IoY29uc3QgaSBvZiBELmVsZW1lbnRzKGUpKWlmKCFzPy4oaSkpc3dpdGNoKGkubG9jYWxOYW1lKXtjYXNlImpjIjp0WyJ0ZXh0LWFsaWduIl09TmUudmFsdWVPZkpjKGkpO2JyZWFrO2Nhc2UidGV4dEFsaWdubWVudCI6dFsidmVydGljYWwtYWxpZ24iXT1OZS52YWx1ZU9mVGV4dEFsaWdubWVudChpKTticmVhaztjYXNlImNvbG9yIjp0LmNvbG9yPU5yLmNvbG9yQXR0cihpLCJ2YWwiLG51bGwsVm4uY29sb3IpO2JyZWFrO2Nhc2Uic3oiOnRbImZvbnQtc2l6ZSJdPXRbIm1pbi1oZWlnaHQiXT1ELmxlbmd0aEF0dHIoaSwidmFsIixHZS5Gb250U2l6ZSk7YnJlYWs7Y2FzZSJzaGQiOnRbImJhY2tncm91bmQtY29sb3IiXT1Oci5jb2xvckF0dHIoaSwiZmlsbCIsbnVsbCxWbi5zaGQpO2JyZWFrO2Nhc2UiaGlnaGxpZ2h0Ijp0WyJiYWNrZ3JvdW5kLWNvbG9yIl09TnIuY29sb3JBdHRyKGksInZhbCIsbnVsbCxWbi5oaWdobGlnaHQpO2JyZWFrO2Nhc2UidmVydEFsaWduIjpicmVhaztjYXNlInBvc2l0aW9uIjp0LnZlcnRpY2FsQWxpZ249RC5sZW5ndGhBdHRyKGksInZhbCIsR2UuRm9udFNpemUpO2JyZWFrO2Nhc2UidGNXIjppZih0aGlzLm9wdGlvbnMuaWdub3JlV2lkdGgpYnJlYWs7Y2FzZSJ0YmxXIjp0LndpZHRoPU5lLnZhbHVlT2ZTaXplKGksInciKTticmVhaztjYXNlInRySGVpZ2h0Ijp0aGlzLnBhcnNlVHJIZWlnaHQoaSx0KTticmVhaztjYXNlInN0cmlrZSI6dFsidGV4dC1kZWNvcmF0aW9uIl09RC5ib29sQXR0cihpLCJ2YWwiLCEwKT8ibGluZS10aHJvdWdoIjoibm9uZSI7YnJlYWs7Y2FzZSJiIjp0WyJmb250LXdlaWdodCJdPUQuYm9vbEF0dHIoaSwidmFsIiwhMCk/ImJvbGQiOiJub3JtYWwiO2JyZWFrO2Nhc2UiaSI6dFsiZm9udC1zdHlsZSJdPUQuYm9vbEF0dHIoaSwidmFsIiwhMCk/Iml0YWxpYyI6Im5vcm1hbCI7YnJlYWs7Y2FzZSJjYXBzIjp0WyJ0ZXh0LXRyYW5zZm9ybSJdPUQuYm9vbEF0dHIoaSwidmFsIiwhMCk/InVwcGVyY2FzZSI6Im5vbmUiO2JyZWFrO2Nhc2Uic21hbGxDYXBzIjp0WyJmb250LXZhcmlhbnQiXT1ELmJvb2xBdHRyKGksInZhbCIsITApPyJzbWFsbC1jYXBzIjoibm9uZSI7YnJlYWs7Y2FzZSJ1Ijp0aGlzLnBhcnNlVW5kZXJsaW5lKGksdCk7YnJlYWs7Y2FzZSJpbmQiOmNhc2UidGJsSW5kIjp0aGlzLnBhcnNlSW5kZW50YXRpb24oaSx0KTticmVhaztjYXNlInJGb250cyI6dGhpcy5wYXJzZUZvbnQoaSx0KTticmVhaztjYXNlInRibEJvcmRlcnMiOnRoaXMucGFyc2VCb3JkZXJQcm9wZXJ0aWVzKGksbnx8dCk7YnJlYWs7Y2FzZSJ0YmxDZWxsU3BhY2luZyI6dFsiYm9yZGVyLXNwYWNpbmciXT1OZS52YWx1ZU9mTWFyZ2luKGkpLHRbImJvcmRlci1jb2xsYXBzZSJdPSJzZXBhcmF0ZSI7YnJlYWs7Y2FzZSJwQmRyIjp0aGlzLnBhcnNlQm9yZGVyUHJvcGVydGllcyhpLHQpO2JyZWFrO2Nhc2UiYmRyIjp0LmJvcmRlcj1OZS52YWx1ZU9mQm9yZGVyKGkpO2JyZWFrO2Nhc2UidGNCb3JkZXJzIjp0aGlzLnBhcnNlQm9yZGVyUHJvcGVydGllcyhpLHQpO2JyZWFrO2Nhc2UidmFuaXNoIjpELmJvb2xBdHRyKGksInZhbCIsITApJiYodC5kaXNwbGF5PSJub25lIik7YnJlYWs7Y2FzZSJrZXJuIjpicmVhaztjYXNlIm5vV3JhcCI6YnJlYWs7Y2FzZSJ0YmxDZWxsTWFyIjpjYXNlInRjTWFyIjp0aGlzLnBhcnNlTWFyZ2luUHJvcGVydGllcyhpLG58fHQpO2JyZWFrO2Nhc2UidGJsTGF5b3V0Ijp0WyJ0YWJsZS1sYXlvdXQiXT1OZS52YWx1ZU9mVGJsTGF5b3V0KGkpO2JyZWFrO2Nhc2UidkFsaWduIjp0WyJ2ZXJ0aWNhbC1hbGlnbiJdPU5lLnZhbHVlT2ZUZXh0QWxpZ25tZW50KGkpO2JyZWFrO2Nhc2Uic3BhY2luZyI6ZS5sb2NhbE5hbWU9PSJwUHIiJiZ0aGlzLnBhcnNlU3BhY2luZyhpLHQpO2JyZWFrO2Nhc2Uid29yZFdyYXAiOkQuYm9vbEF0dHIoaSwidmFsIikmJih0WyJvdmVyZmxvdy13cmFwIl09ImJyZWFrLXdvcmQiKTticmVhaztjYXNlInN1cHByZXNzQXV0b0h5cGhlbnMiOnQuaHlwaGVucz1ELmJvb2xBdHRyKGksInZhbCIsITApPyJub25lIjoiYXV0byI7YnJlYWs7Y2FzZSJsYW5nIjp0LiRsYW5nPUQuYXR0cihpLCJ2YWwiKTticmVhaztjYXNlInJ0bCI6Y2FzZSJiaWRpIjpELmJvb2xBdHRyKGksInZhbCIsITApJiYodC5kaXJlY3Rpb249InJ0bCIpO2JyZWFrO2Nhc2UiYkNzIjpjYXNlImlDcyI6Y2FzZSJzekNzIjpjYXNlInRhYnMiOmNhc2Uib3V0bGluZUx2bCI6Y2FzZSJjb250ZXh0dWFsU3BhY2luZyI6Y2FzZSJ0YmxTdHlsZUNvbEJhbmRTaXplIjpjYXNlInRibFN0eWxlUm93QmFuZFNpemUiOmNhc2Uid2ViSGlkZGVuIjpjYXNlInBhZ2VCcmVha0JlZm9yZSI6Y2FzZSJzdXBwcmVzc0xpbmVOdW1iZXJzIjpjYXNlImtlZXBMaW5lcyI6Y2FzZSJrZWVwTmV4dCI6Y2FzZSJ3aWRvd0NvbnRyb2wiOmNhc2UiYmlkaSI6Y2FzZSJydGwiOmNhc2Uibm9Qcm9vZiI6YnJlYWs7ZGVmYXVsdDp0aGlzLm9wdGlvbnMuZGVidWcmJmNvbnNvbGUud2FybihgRE9DWDogVW5rbm93biBkb2N1bWVudCBlbGVtZW50OiAke2UubG9jYWxOYW1lfS4ke2kubG9jYWxOYW1lfWApO2JyZWFrfXJldHVybiB0fXBhcnNlVW5kZXJsaW5lKGUsdCl7dmFyIG49RC5hdHRyKGUsInZhbCIpO2lmKG4hPW51bGwpe3N3aXRjaChuKXtjYXNlImRhc2giOmNhc2UiZGFzaERvdERvdEhlYXZ5IjpjYXNlImRhc2hEb3RIZWF2eSI6Y2FzZSJkYXNoZWRIZWF2eSI6Y2FzZSJkYXNoTG9uZyI6Y2FzZSJkYXNoTG9uZ0hlYXZ5IjpjYXNlImRvdERhc2giOmNhc2UiZG90RG90RGFzaCI6dFsidGV4dC1kZWNvcmF0aW9uIl09InVuZGVybGluZSBkYXNoZWQiO2JyZWFrO2Nhc2UiZG90dGVkIjpjYXNlImRvdHRlZEhlYXZ5Ijp0WyJ0ZXh0LWRlY29yYXRpb24iXT0idW5kZXJsaW5lIGRvdHRlZCI7YnJlYWs7Y2FzZSJkb3VibGUiOnRbInRleHQtZGVjb3JhdGlvbiJdPSJ1bmRlcmxpbmUgZG91YmxlIjticmVhaztjYXNlInNpbmdsZSI6Y2FzZSJ0aGljayI6dFsidGV4dC1kZWNvcmF0aW9uIl09InVuZGVybGluZSI7YnJlYWs7Y2FzZSJ3YXZlIjpjYXNlIndhdnlEb3VibGUiOmNhc2Uid2F2eUhlYXZ5Ijp0WyJ0ZXh0LWRlY29yYXRpb24iXT0idW5kZXJsaW5lIHdhdnkiO2JyZWFrO2Nhc2Uid29yZHMiOnRbInRleHQtZGVjb3JhdGlvbiJdPSJ1bmRlcmxpbmUiO2JyZWFrO2Nhc2Uibm9uZSI6dFsidGV4dC1kZWNvcmF0aW9uIl09Im5vbmUiO2JyZWFrfXZhciBzPU5yLmNvbG9yQXR0cihlLCJjb2xvciIpO3MmJih0WyJ0ZXh0LWRlY29yYXRpb24tY29sb3IiXT1zKX19cGFyc2VGb250KGUsdCl7dmFyIG49RC5hdHRyKGUsImFzY2lpIikscz1OZS50aGVtZVZhbHVlKGUsImFzY2lpVGhlbWUiKSxpPUQuYXR0cihlLCJlYXN0QXNpYSIpLGE9W24scyxpXS5maWx0ZXIobz0+bykubWFwKG89PiRzKG8pKTthLmxlbmd0aD4wJiYodFsiZm9udC1mYW1pbHkiXT1bLi4ubmV3IFNldChhKV0uam9pbigiLCAiKSl9cGFyc2VJbmRlbnRhdGlvbihlLHQpe3ZhciBuPUQubGVuZ3RoQXR0cihlLCJmaXJzdExpbmUiKSxzPUQubGVuZ3RoQXR0cihlLCJoYW5naW5nIiksaT1ELmxlbmd0aEF0dHIoZSwibGVmdCIpLGE9RC5sZW5ndGhBdHRyKGUsInN0YXJ0Iiksbz1ELmxlbmd0aEF0dHIoZSwicmlnaHQiKSx1PUQubGVuZ3RoQXR0cihlLCJlbmQiKTtuJiYodFsidGV4dC1pbmRlbnQiXT1uKSxzJiYodFsidGV4dC1pbmRlbnQiXT1gLSR7c31gKSwoaXx8YSkmJih0WyJtYXJnaW4taW5saW5lLXN0YXJ0Il09aXx8YSksKG98fHUpJiYodFsibWFyZ2luLWlubGluZS1lbmQiXT1vfHx1KX1wYXJzZVNwYWNpbmcoZSx0KXt2YXIgbj1ELmxlbmd0aEF0dHIoZSwiYmVmb3JlIikscz1ELmxlbmd0aEF0dHIoZSwiYWZ0ZXIiKSxpPUQuaW50QXR0cihlLCJsaW5lIixudWxsKSxhPUQuYXR0cihlLCJsaW5lUnVsZSIpO2lmKG4mJih0WyJtYXJnaW4tdG9wIl09bikscyYmKHRbIm1hcmdpbi1ib3R0b20iXT1zKSxpIT09bnVsbClzd2l0Y2goYSl7Y2FzZSJhdXRvIjp0WyJsaW5lLWhlaWdodCJdPWAkeyhpLzI0MCkudG9GaXhlZCgyKX1gO2JyZWFrO2Nhc2UiYXRMZWFzdCI6dFsibGluZS1oZWlnaHQiXT1gY2FsYygxMDAlICsgJHtpLzIwfXB0KWA7YnJlYWs7ZGVmYXVsdDp0WyJsaW5lLWhlaWdodCJdPXRbIm1pbi1oZWlnaHQiXT1gJHtpLzIwfXB0YDticmVha319cGFyc2VNYXJnaW5Qcm9wZXJ0aWVzKGUsdCl7Zm9yKGNvbnN0IG4gb2YgRC5lbGVtZW50cyhlKSlzd2l0Y2gobi5sb2NhbE5hbWUpe2Nhc2UibGVmdCI6dFsicGFkZGluZy1sZWZ0Il09TmUudmFsdWVPZk1hcmdpbihuKTticmVhaztjYXNlInJpZ2h0Ijp0WyJwYWRkaW5nLXJpZ2h0Il09TmUudmFsdWVPZk1hcmdpbihuKTticmVhaztjYXNlInRvcCI6dFsicGFkZGluZy10b3AiXT1OZS52YWx1ZU9mTWFyZ2luKG4pO2JyZWFrO2Nhc2UiYm90dG9tIjp0WyJwYWRkaW5nLWJvdHRvbSJdPU5lLnZhbHVlT2ZNYXJnaW4obik7YnJlYWt9fXBhcnNlVHJIZWlnaHQoZSx0KXtzd2l0Y2goRC5hdHRyKGUsImhSdWxlIikpe2Nhc2UiZXhhY3QiOnQuaGVpZ2h0PUQubGVuZ3RoQXR0cihlLCJ2YWwiKTticmVhaztjYXNlImF0TGVhc3QiOmRlZmF1bHQ6dC5oZWlnaHQ9RC5sZW5ndGhBdHRyKGUsInZhbCIpO2JyZWFrfX1wYXJzZUJvcmRlclByb3BlcnRpZXMoZSx0KXtmb3IoY29uc3QgbiBvZiBELmVsZW1lbnRzKGUpKXN3aXRjaChuLmxvY2FsTmFtZSl7Y2FzZSJzdGFydCI6Y2FzZSJsZWZ0Ijp0WyJib3JkZXItbGVmdCJdPU5lLnZhbHVlT2ZCb3JkZXIobik7YnJlYWs7Y2FzZSJlbmQiOmNhc2UicmlnaHQiOnRbImJvcmRlci1yaWdodCJdPU5lLnZhbHVlT2ZCb3JkZXIobik7YnJlYWs7Y2FzZSJ0b3AiOnRbImJvcmRlci10b3AiXT1OZS52YWx1ZU9mQm9yZGVyKG4pO2JyZWFrO2Nhc2UiYm90dG9tIjp0WyJib3JkZXItYm90dG9tIl09TmUudmFsdWVPZkJvcmRlcihuKTticmVha319fWNvbnN0IGpBPVsiYmxhY2siLCJibHVlIiwiY3lhbiIsImRhcmtCbHVlIiwiZGFya0N5YW4iLCJkYXJrR3JheSIsImRhcmtHcmVlbiIsImRhcmtNYWdlbnRhIiwiZGFya1JlZCIsImRhcmtZZWxsb3ciLCJncmVlbiIsImxpZ2h0R3JheSIsIm1hZ2VudGEiLCJub25lIiwicmVkIiwid2hpdGUiLCJ5ZWxsb3ciXTtjbGFzcyBOcntzdGF0aWMgY29sb3JBdHRyKGUsdCxuPW51bGwscz0iYmxhY2siKXt2YXIgaT1ELmF0dHIoZSx0KTtpZihpKXJldHVybiBpPT0iYXV0byI/czpqQS5pbmNsdWRlcyhpKT9pOmAjJHtpfWA7dmFyIGE9RC5hdHRyKGUsInRoZW1lQ29sb3IiKTtyZXR1cm4gYT9gdmFyKC0tZG9jeC0ke2F9LWNvbG9yKWA6bn19Y2xhc3MgTmV7c3RhdGljIHRoZW1lVmFsdWUoZSx0KXt2YXIgbj1ELmF0dHIoZSx0KTtyZXR1cm4gbj9gdmFyKC0tZG9jeC0ke259LWZvbnQpYDpudWxsfXN0YXRpYyB2YWx1ZU9mU2l6ZShlLHQpe3ZhciBuPUdlLkR4YTtzd2l0Y2goRC5hdHRyKGUsInR5cGUiKSl7Y2FzZSJkeGEiOmJyZWFrO2Nhc2UicGN0IjpuPUdlLlBlcmNlbnQ7YnJlYWs7Y2FzZSJhdXRvIjpyZXR1cm4iYXV0byJ9cmV0dXJuIEQubGVuZ3RoQXR0cihlLHQsbil9c3RhdGljIHZhbHVlT2ZNYXJnaW4oZSl7cmV0dXJuIEQubGVuZ3RoQXR0cihlLCJ3Iil9c3RhdGljIHZhbHVlT2ZCb3JkZXIoZSl7dmFyIHQ9TmUucGFyc2VCb3JkZXJUeXBlKEQuYXR0cihlLCJ2YWwiKSk7aWYodD09Im5vbmUiKXJldHVybiJub25lIjt2YXIgbj1Oci5jb2xvckF0dHIoZSwiY29sb3IiKSxzPUQubGVuZ3RoQXR0cihlLCJzeiIsR2UuQm9yZGVyKTtyZXR1cm5gJHtzfSAke3R9ICR7bj09ImF1dG8iP1ZuLmJvcmRlckNvbG9yOm59YH1zdGF0aWMgcGFyc2VCb3JkZXJUeXBlKGUpe3N3aXRjaChlKXtjYXNlInNpbmdsZSI6cmV0dXJuInNvbGlkIjtjYXNlImRhc2hEb3RTdHJva2VkIjpyZXR1cm4ic29saWQiO2Nhc2UiZGFzaGVkIjpyZXR1cm4iZGFzaGVkIjtjYXNlImRhc2hTbWFsbEdhcCI6cmV0dXJuImRhc2hlZCI7Y2FzZSJkb3REYXNoIjpyZXR1cm4iZG90dGVkIjtjYXNlImRvdERvdERhc2giOnJldHVybiJkb3R0ZWQiO2Nhc2UiZG90dGVkIjpyZXR1cm4iZG90dGVkIjtjYXNlImRvdWJsZSI6cmV0dXJuImRvdWJsZSI7Y2FzZSJkb3VibGVXYXZlIjpyZXR1cm4iZG91YmxlIjtjYXNlImluc2V0IjpyZXR1cm4iaW5zZXQiO2Nhc2UibmlsIjpyZXR1cm4ibm9uZSI7Y2FzZSJub25lIjpyZXR1cm4ibm9uZSI7Y2FzZSJvdXRzZXQiOnJldHVybiJvdXRzZXQiO2Nhc2UidGhpY2siOnJldHVybiJzb2xpZCI7Y2FzZSJ0aGlja1RoaW5MYXJnZUdhcCI6cmV0dXJuInNvbGlkIjtjYXNlInRoaWNrVGhpbk1lZGl1bUdhcCI6cmV0dXJuInNvbGlkIjtjYXNlInRoaWNrVGhpblNtYWxsR2FwIjpyZXR1cm4ic29saWQiO2Nhc2UidGhpblRoaWNrTGFyZ2VHYXAiOnJldHVybiJzb2xpZCI7Y2FzZSJ0aGluVGhpY2tNZWRpdW1HYXAiOnJldHVybiJzb2xpZCI7Y2FzZSJ0aGluVGhpY2tTbWFsbEdhcCI6cmV0dXJuInNvbGlkIjtjYXNlInRoaW5UaGlja1RoaW5MYXJnZUdhcCI6cmV0dXJuInNvbGlkIjtjYXNlInRoaW5UaGlja1RoaW5NZWRpdW1HYXAiOnJldHVybiJzb2xpZCI7Y2FzZSJ0aGluVGhpY2tUaGluU21hbGxHYXAiOnJldHVybiJzb2xpZCI7Y2FzZSJ0aHJlZURFbWJvc3MiOnJldHVybiJzb2xpZCI7Y2FzZSJ0aHJlZURFbmdyYXZlIjpyZXR1cm4ic29saWQiO2Nhc2UidHJpcGxlIjpyZXR1cm4iZG91YmxlIjtjYXNlIndhdmUiOnJldHVybiJzb2xpZCJ9cmV0dXJuInNvbGlkIn1zdGF0aWMgdmFsdWVPZlRibExheW91dChlKXt2YXIgdD1ELmF0dHIoZSwidmFsIik7cmV0dXJuIHQ9PSJmaXhlZCI/ImZpeGVkIjoiYXV0byJ9c3RhdGljIGNsYXNzTmFtZU9mQ25mU3R5bGUoZSl7Y29uc3QgdD1ELmF0dHIoZSwidmFsIik7cmV0dXJuWyJmaXJzdC1yb3ciLCJsYXN0LXJvdyIsImZpcnN0LWNvbCIsImxhc3QtY29sIiwib2RkLWNvbCIsImV2ZW4tY29sIiwib2RkLXJvdyIsImV2ZW4tcm93IiwibmUtY2VsbCIsIm53LWNlbGwiLCJzZS1jZWxsIiwic3ctY2VsbCJdLmZpbHRlcigocyxpKT0+dFtpXT09IjEiKS5qb2luKCIgIil9c3RhdGljIHZhbHVlT2ZKYyhlKXt2YXIgdD1ELmF0dHIoZSwidmFsIik7c3dpdGNoKHQpe2Nhc2Uic3RhcnQiOmNhc2UibGVmdCI6cmV0dXJuImxlZnQiO2Nhc2UiY2VudGVyIjpyZXR1cm4iY2VudGVyIjtjYXNlImVuZCI6Y2FzZSJyaWdodCI6cmV0dXJuInJpZ2h0IjtjYXNlImJvdGgiOnJldHVybiJqdXN0aWZ5In1yZXR1cm4gdH1zdGF0aWMgdmFsdWVPZlZlcnRBbGlnbihlLHQ9ITEpe3ZhciBuPUQuYXR0cihlLCJ2YWwiKTtzd2l0Y2gobil7Y2FzZSJzdWJzY3JpcHQiOnJldHVybiJzdWIiO2Nhc2Uic3VwZXJzY3JpcHQiOnJldHVybiB0PyJzdXAiOiJzdXBlciJ9cmV0dXJuIHQ/bnVsbDpufXN0YXRpYyB2YWx1ZU9mVGV4dEFsaWdubWVudChlKXt2YXIgdD1ELmF0dHIoZSwidmFsIik7c3dpdGNoKHQpe2Nhc2UiYXV0byI6Y2FzZSJiYXNlbGluZSI6cmV0dXJuImJhc2VsaW5lIjtjYXNlInRvcCI6cmV0dXJuInRvcCI7Y2FzZSJjZW50ZXIiOnJldHVybiJtaWRkbGUiO2Nhc2UiYm90dG9tIjpyZXR1cm4iYm90dG9tIn1yZXR1cm4gdH1zdGF0aWMgYWRkU2l6ZShlLHQpe3JldHVybiBlPT1udWxsP3Q6dD09bnVsbD9lOmBjYWxjKCR7ZX0gKyAke3R9KWB9c3RhdGljIGNsYXNzTmFtZU9mdGJsTG9vayhlKXtjb25zdCB0PUQuaGV4QXR0cihlLCJ2YWwiLDApO2xldCBuPSIiO3JldHVybihELmJvb2xBdHRyKGUsImZpcnN0Um93Iil8fHQmMzIpJiYobis9IiBmaXJzdC1yb3ciKSwoRC5ib29sQXR0cihlLCJsYXN0Um93Iil8fHQmNjQpJiYobis9IiBsYXN0LXJvdyIpLChELmJvb2xBdHRyKGUsImZpcnN0Q29sdW1uIil8fHQmMTI4KSYmKG4rPSIgZmlyc3QtY29sIiksKEQuYm9vbEF0dHIoZSwibGFzdENvbHVtbiIpfHx0JjI1NikmJihuKz0iIGxhc3QtY29sIiksKEQuYm9vbEF0dHIoZSwibm9IQmFuZCIpfHx0JjUxMikmJihuKz0iIG5vLWhiYW5kIiksKEQuYm9vbEF0dHIoZSwibm9WQmFuZCIpfHx0JjEwMjQpJiYobis9IiBuby12YmFuZCIpLG4udHJpbSgpfX1jb25zdCBobz17cG9zOjAsbGVhZGVyOiJub25lIixzdHlsZToibGVmdCJ9LFhBPTUwO2Z1bmN0aW9uICRBKHI9ZG9jdW1lbnQuYm9keSl7Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtlLnN0eWxlLndpZHRoPSIxMDBwdCIsci5hcHBlbmRDaGlsZChlKTtjb25zdCB0PTEwMC9lLm9mZnNldFdpZHRoO3JldHVybiByLnJlbW92ZUNoaWxkKGUpLHR9ZnVuY3Rpb24gZWQocixlLHQsbj03Mi85Nil7Y29uc3Qgcz1yLmNsb3Nlc3QoInAiKSxpPXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYT1zLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89Z2V0Q29tcHV0ZWRTdHlsZShzKSx1PWU/Lmxlbmd0aD4wP2UubWFwKEU9Pih7cG9zOkFvKEUucG9zaXRpb24pLGxlYWRlcjpFLmxlYWRlcixzdHlsZTpFLnN0eWxlfSkpLnNvcnQoKEUsdyk9PkUucG9zLXcucG9zKTpbaG9dLGw9dVt1Lmxlbmd0aC0xXSxBPWEud2lkdGgqbixkPUFvKHQpO2xldCBnPWwucG9zK2Q7aWYoZzxBKWZvcig7ZzxBJiZ1Lmxlbmd0aDxYQTtnKz1kKXUucHVzaCh7Li4uaG8scG9zOmd9KTtjb25zdCBmPXBhcnNlRmxvYXQoby5tYXJnaW5MZWZ0KSxDPWEubGVmdCtmLHA9KGkubGVmdC1DKSpuLGI9dS5maW5kKEU9PkUuc3R5bGUhPSJjbGVhciImJkUucG9zPnApO2lmKGI9PW51bGwpcmV0dXJuO2xldCBtPTE7aWYoYi5zdHlsZT09InJpZ2h0Inx8Yi5zdHlsZT09ImNlbnRlciIpe2NvbnN0IEU9QXJyYXkuZnJvbShzLnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke3IuY2xhc3NOYW1lfWApKSx3PUUuaW5kZXhPZihyKSsxLE49ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtOLnNldFN0YXJ0KHIsMSksdzxFLmxlbmd0aD9OLnNldEVuZEJlZm9yZShFW3ddKTpOLnNldEVuZEFmdGVyKHMpO2NvbnN0IEk9Yi5zdHlsZT09ImNlbnRlciI/LjU6MSxSPU4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksTT1SLmxlZnQrSSpSLndpZHRoLShhLmxlZnQtZik7bT1iLnBvcy1NKm59ZWxzZSBtPWIucG9zLXA7c3dpdGNoKHIuaW5uZXJIVE1MPSImbmJzcDsiLHIuc3R5bGUudGV4dERlY29yYXRpb249ImluaGVyaXQiLHIuc3R5bGUud29yZFNwYWNpbmc9YCR7bS50b0ZpeGVkKDApfXB0YCxiLmxlYWRlcil7Y2FzZSJkb3QiOmNhc2UibWlkZGxlRG90IjpyLnN0eWxlLnRleHREZWNvcmF0aW9uPSJ1bmRlcmxpbmUiLHIuc3R5bGUudGV4dERlY29yYXRpb25TdHlsZT0iZG90dGVkIjticmVhaztjYXNlImh5cGhlbiI6Y2FzZSJoZWF2eSI6Y2FzZSJ1bmRlcnNjb3JlIjpyLnN0eWxlLnRleHREZWNvcmF0aW9uPSJ1bmRlcmxpbmUiO2JyZWFrfX1mdW5jdGlvbiBBbyhyKXtyZXR1cm4gcGFyc2VGbG9hdChyKX1jb25zdCBtZT17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsbWF0aE1MOiJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIn07Y2xhc3MgdGR7Y29uc3RydWN0b3IoZSl7dGhpcy5odG1sRG9jdW1lbnQ9ZSx0aGlzLmNsYXNzTmFtZT0iZG9jeCIsdGhpcy5zdHlsZU1hcD17fSx0aGlzLmN1cnJlbnRQYXJ0PW51bGwsdGhpcy50YWJsZVZlcnRpY2FsTWVyZ2VzPVtdLHRoaXMuY3VycmVudFZlcnRpY2FsTWVyZ2U9bnVsbCx0aGlzLnRhYmxlQ2VsbFBvc2l0aW9ucz1bXSx0aGlzLmN1cnJlbnRDZWxsUG9zaXRpb249bnVsbCx0aGlzLmZvb3Rub3RlTWFwPXt9LHRoaXMuZW5kbm90ZU1hcD17fSx0aGlzLmN1cnJlbnRFbmRub3RlSWRzPVtdLHRoaXMudXNlZEhlZGVyRm9vdGVyUGFydHM9W10sdGhpcy5jdXJyZW50VGFicz1bXSx0aGlzLmNvbW1lbnRNYXA9e30sdGhpcy50YXNrcz1bXSx0aGlzLnBvc3RSZW5kZXJUYXNrcz1bXX1hc3luYyByZW5kZXIoZSx0LG49bnVsbCxzKXt0aGlzLmRvY3VtZW50PWUsdGhpcy5vcHRpb25zPXMsdGhpcy5jbGFzc05hbWU9cy5jbGFzc05hbWUsdGhpcy5yb290U2VsZWN0b3I9cy5pbldyYXBwZXI/YC4ke3RoaXMuY2xhc3NOYW1lfS13cmFwcGVyYDoiOnJvb3QiLHRoaXMuc3R5bGVNYXA9bnVsbCx0aGlzLnRhc2tzPVtdLHRoaXMub3B0aW9ucy5yZW5kZXJDb21tZW50cyYmZ2xvYmFsVGhpcy5IaWdobGlnaHQmJih0aGlzLmNvbW1lbnRIaWdobGlnaHQ9bmV3IEhpZ2hsaWdodCksbj1ufHx0LGZvKG4pLGZvKHQpLG4uYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVDb21tZW50KCJkb2N4anMgbGlicmFyeSBwcmVkZWZpbmVkIHN0eWxlcyIpKSxuLmFwcGVuZENoaWxkKHRoaXMucmVuZGVyRGVmYXVsdFN0eWxlKCkpLGUudGhlbWVQYXJ0JiYobi5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUNvbW1lbnQoImRvY3hqcyBkb2N1bWVudCB0aGVtZSB2YWx1ZXMiKSksdGhpcy5yZW5kZXJUaGVtZShlLnRoZW1lUGFydCxuKSksZS5zdHlsZXNQYXJ0IT1udWxsJiYodGhpcy5zdHlsZU1hcD10aGlzLnByb2Nlc3NTdHlsZXMoZS5zdHlsZXNQYXJ0LnN0eWxlcyksbi5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUNvbW1lbnQoImRvY3hqcyBkb2N1bWVudCBzdHlsZXMiKSksbi5hcHBlbmRDaGlsZCh0aGlzLnJlbmRlclN0eWxlcyhlLnN0eWxlc1BhcnQuc3R5bGVzKSkpLGUubnVtYmVyaW5nUGFydCYmKHRoaXMucHJvZGVzc051bWJlcmluZ3MoZS5udW1iZXJpbmdQYXJ0LmRvbU51bWJlcmluZ3MpLG4uYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVDb21tZW50KCJkb2N4anMgZG9jdW1lbnQgbnVtYmVyaW5nIHN0eWxlcyIpKSxuLmFwcGVuZENoaWxkKHRoaXMucmVuZGVyTnVtYmVyaW5nKGUubnVtYmVyaW5nUGFydC5kb21OdW1iZXJpbmdzLG4pKSksZS5mb290bm90ZXNQYXJ0JiYodGhpcy5mb290bm90ZU1hcD1qdChlLmZvb3Rub3Rlc1BhcnQubm90ZXMsYT0+YS5pZCkpLGUuZW5kbm90ZXNQYXJ0JiYodGhpcy5lbmRub3RlTWFwPWp0KGUuZW5kbm90ZXNQYXJ0Lm5vdGVzLGE9PmEuaWQpKSxlLnNldHRpbmdzUGFydCYmKHRoaXMuZGVmYXVsdFRhYlNpemU9ZS5zZXR0aW5nc1BhcnQuc2V0dGluZ3M/LmRlZmF1bHRUYWJTdG9wKSwhcy5pZ25vcmVGb250cyYmZS5mb250VGFibGVQYXJ0JiZ0aGlzLnJlbmRlckZvbnRUYWJsZShlLmZvbnRUYWJsZVBhcnQsbik7dmFyIGk9dGhpcy5yZW5kZXJTZWN0aW9ucyhlLmRvY3VtZW50UGFydC5ib2R5KTt0aGlzLm9wdGlvbnMuaW5XcmFwcGVyP3QuYXBwZW5kQ2hpbGQodGhpcy5yZW5kZXJXcmFwcGVyKGkpKTppaSh0LGkpLHRoaXMuY29tbWVudEhpZ2hsaWdodCYmcy5yZW5kZXJDb21tZW50cyYmQ1NTLmhpZ2hsaWdodHMuc2V0KGAke3RoaXMuY2xhc3NOYW1lfS1jb21tZW50c2AsdGhpcy5jb21tZW50SGlnaGxpZ2h0KSx0aGlzLnBvc3RSZW5kZXJUYXNrcy5mb3JFYWNoKGE9PmEoKSksYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHRoaXMudGFza3MpLHRoaXMucmVmcmVzaFRhYlN0b3BzKCl9cmVuZGVyVGhlbWUoZSx0KXtjb25zdCBuPXt9LHM9ZS50aGVtZT8uZm9udFNjaGVtZTtzJiYocy5tYWpvckZvbnQmJihuWyItLWRvY3gtbWFqb3JIQW5zaS1mb250Il09cy5tYWpvckZvbnQubGF0aW5UeXBlZmFjZSkscy5taW5vckZvbnQmJihuWyItLWRvY3gtbWlub3JIQW5zaS1mb250Il09cy5taW5vckZvbnQubGF0aW5UeXBlZmFjZSkpO2NvbnN0IGk9ZS50aGVtZT8uY29sb3JTY2hlbWU7aWYoaSlmb3IobGV0W28sdV1vZiBPYmplY3QuZW50cmllcyhpLmNvbG9ycykpbltgLS1kb2N4LSR7b30tY29sb3JgXT1gIyR7dX1gO2NvbnN0IGE9dGhpcy5zdHlsZVRvU3RyaW5nKGAuJHt0aGlzLmNsYXNzTmFtZX1gLG4pO3QuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVTdHlsZUVsZW1lbnQoYSkpfXJlbmRlckZvbnRUYWJsZShlLHQpe2ZvcihsZXQgbiBvZiBlLmZvbnRzKWZvcihsZXQgcyBvZiBuLmVtYmVkRm9udFJlZnMpdGhpcy50YXNrcy5wdXNoKHRoaXMuZG9jdW1lbnQubG9hZEZvbnQocy5pZCxzLmtleSkudGhlbihpPT57Y29uc3QgYT17ImZvbnQtZmFtaWx5IjokcyhuLm5hbWUpLHNyYzpgdXJsKCR7aX0pYH07KHMudHlwZT09ImJvbGQifHxzLnR5cGU9PSJib2xkSXRhbGljIikmJihhWyJmb250LXdlaWdodCJdPSJib2xkIiksKHMudHlwZT09Iml0YWxpYyJ8fHMudHlwZT09ImJvbGRJdGFsaWMiKSYmKGFbImZvbnQtc3R5bGUiXT0iaXRhbGljIik7Y29uc3Qgbz10aGlzLnN0eWxlVG9TdHJpbmcoIkBmb250LWZhY2UiLGEpO3QuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVDb21tZW50KGBkb2N4anMgJHtuLm5hbWV9IGZvbnRgKSksdC5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZVN0eWxlRWxlbWVudChvKSl9KSl9cHJvY2Vzc1N0eWxlTmFtZShlKXtyZXR1cm4gZT9gJHt0aGlzLmNsYXNzTmFtZX1fJHtVaChlKX1gOnRoaXMuY2xhc3NOYW1lfXByb2Nlc3NTdHlsZXMoZSl7Y29uc3QgdD1qdChlLmZpbHRlcihzPT5zLmlkIT1udWxsKSxzPT5zLmlkKTtmb3IoY29uc3QgcyBvZiBlLmZpbHRlcihpPT5pLmJhc2VkT24pKXt2YXIgbj10W3MuYmFzZWRPbl07aWYobil7cy5wYXJhZ3JhcGhQcm9wcz1ZbihzLnBhcmFncmFwaFByb3BzLG4ucGFyYWdyYXBoUHJvcHMpLHMucnVuUHJvcHM9WW4ocy5ydW5Qcm9wcyxuLnJ1blByb3BzKTtmb3IoY29uc3QgaSBvZiBuLnN0eWxlcyl7Y29uc3QgYT1zLnN0eWxlcy5maW5kKG89Pm8udGFyZ2V0PT1pLnRhcmdldCk7YT90aGlzLmNvcHlTdHlsZVByb3BlcnRpZXMoaS52YWx1ZXMsYS52YWx1ZXMpOnMuc3R5bGVzLnB1c2goey4uLmksdmFsdWVzOnsuLi5pLnZhbHVlc319KX19ZWxzZSB0aGlzLm9wdGlvbnMuZGVidWcmJmNvbnNvbGUud2FybihgQ2FuJ3QgZmluZCBiYXNlIHN0eWxlICR7cy5iYXNlZE9ufWApfWZvcihsZXQgcyBvZiBlKXMuY3NzTmFtZT10aGlzLnByb2Nlc3NTdHlsZU5hbWUocy5pZCk7cmV0dXJuIHR9cHJvZGVzc051bWJlcmluZ3MoZSl7Zm9yKGxldCB0IG9mIGUuZmlsdGVyKG49Pm4ucFN0eWxlTmFtZSkpe2NvbnN0IG49dGhpcy5maW5kU3R5bGUodC5wU3R5bGVOYW1lKTtuPy5wYXJhZ3JhcGhQcm9wcz8ubnVtYmVyaW5nJiYobi5wYXJhZ3JhcGhQcm9wcy5udW1iZXJpbmcubGV2ZWw9dC5sZXZlbCl9fXByb2Nlc3NFbGVtZW50KGUpe2lmKGUuY2hpbGRyZW4pZm9yKHZhciB0IG9mIGUuY2hpbGRyZW4pdC5wYXJlbnQ9ZSx0LnR5cGU9PUIuVGFibGU/dGhpcy5wcm9jZXNzVGFibGUodCk6dGhpcy5wcm9jZXNzRWxlbWVudCh0KX1wcm9jZXNzVGFibGUoZSl7Zm9yKHZhciB0IG9mIGUuY2hpbGRyZW4pZm9yKHZhciBuIG9mIHQuY2hpbGRyZW4pbi5jc3NTdHlsZT10aGlzLmNvcHlTdHlsZVByb3BlcnRpZXMoZS5jZWxsU3R5bGUsbi5jc3NTdHlsZSxbImJvcmRlci1sZWZ0IiwiYm9yZGVyLXJpZ2h0IiwiYm9yZGVyLXRvcCIsImJvcmRlci1ib3R0b20iLCJwYWRkaW5nLWxlZnQiLCJwYWRkaW5nLXJpZ2h0IiwicGFkZGluZy10b3AiLCJwYWRkaW5nLWJvdHRvbSJdKSx0aGlzLnByb2Nlc3NFbGVtZW50KG4pfWNvcHlTdHlsZVByb3BlcnRpZXMoZSx0LG49bnVsbCl7aWYoIWUpcmV0dXJuIHQ7dD09bnVsbCYmKHQ9e30pLG49PW51bGwmJihuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpKTtmb3IodmFyIHMgb2YgbillLmhhc093blByb3BlcnR5KHMpJiYhdC5oYXNPd25Qcm9wZXJ0eShzKSYmKHRbc109ZVtzXSk7cmV0dXJuIHR9Y3JlYXRlUGFnZUVsZW1lbnQoZSx0KXt2YXIgbj10aGlzLmNyZWF0ZUVsZW1lbnQoInNlY3Rpb24iLHtjbGFzc05hbWU6ZX0pO3JldHVybiB0JiYodC5wYWdlTWFyZ2lucyYmKG4uc3R5bGUucGFkZGluZ0xlZnQ9dC5wYWdlTWFyZ2lucy5sZWZ0LG4uc3R5bGUucGFkZGluZ1JpZ2h0PXQucGFnZU1hcmdpbnMucmlnaHQsbi5zdHlsZS5wYWRkaW5nVG9wPXQucGFnZU1hcmdpbnMudG9wLG4uc3R5bGUucGFkZGluZ0JvdHRvbT10LnBhZ2VNYXJnaW5zLmJvdHRvbSksdC5wYWdlU2l6ZSYmKHRoaXMub3B0aW9ucy5pZ25vcmVXaWR0aHx8KG4uc3R5bGUud2lkdGg9dC5wYWdlU2l6ZS53aWR0aCksdGhpcy5vcHRpb25zLmlnbm9yZUhlaWdodHx8KG4uc3R5bGUubWluSGVpZ2h0PXQucGFnZVNpemUuaGVpZ2h0KSkpLG59Y3JlYXRlU2VjdGlvbkNvbnRlbnQoZSl7dmFyIHQ9dGhpcy5jcmVhdGVFbGVtZW50KCJhcnRpY2xlIik7cmV0dXJuIGUuY29sdW1ucyYmZS5jb2x1bW5zLm51bWJlck9mQ29sdW1ucyYmKHQuc3R5bGUuY29sdW1uQ291bnQ9YCR7ZS5jb2x1bW5zLm51bWJlck9mQ29sdW1uc31gLHQuc3R5bGUuY29sdW1uR2FwPWUuY29sdW1ucy5zcGFjZSxlLmNvbHVtbnMuc2VwYXJhdG9yJiYodC5zdHlsZS5jb2x1bW5SdWxlPSIxcHggc29saWQgYmxhY2siKSksdH1yZW5kZXJTZWN0aW9ucyhlKXtjb25zdCB0PVtdO3RoaXMucHJvY2Vzc0VsZW1lbnQoZSk7Y29uc3Qgbj10aGlzLnNwbGl0QnlTZWN0aW9uKGUuY2hpbGRyZW4sZS5wcm9wcykscz10aGlzLmdyb3VwQnlQYWdlQnJlYWtzKG4pO2xldCBpPW51bGw7Zm9yKGxldCBvPTAsdT1zLmxlbmd0aDtvPHU7bysrKXt0aGlzLmN1cnJlbnRGb290bm90ZUlkcz1bXTtsZXQgQT1zW29dWzBdLnNlY3RQcm9wcztjb25zdCBkPXRoaXMuY3JlYXRlUGFnZUVsZW1lbnQodGhpcy5jbGFzc05hbWUsQSk7dGhpcy5yZW5kZXJTdHlsZVZhbHVlcyhlLmNzc1N0eWxlLGQpLHRoaXMub3B0aW9ucy5yZW5kZXJIZWFkZXJzJiZ0aGlzLnJlbmRlckhlYWRlckZvb3RlcihBLmhlYWRlclJlZnMsQSx0Lmxlbmd0aCxpIT1BLGQpO2Zvcihjb25zdCBnIG9mIHNbb10pe3ZhciBhPXRoaXMuY3JlYXRlU2VjdGlvbkNvbnRlbnQoZy5zZWN0UHJvcHMpO3RoaXMucmVuZGVyRWxlbWVudHMoZy5lbGVtZW50cyxhKSxkLmFwcGVuZENoaWxkKGEpLEE9Zy5zZWN0UHJvcHN9dGhpcy5vcHRpb25zLnJlbmRlckZvb3Rub3RlcyYmdGhpcy5yZW5kZXJOb3Rlcyh0aGlzLmN1cnJlbnRGb290bm90ZUlkcyx0aGlzLmZvb3Rub3RlTWFwLGQpLHRoaXMub3B0aW9ucy5yZW5kZXJFbmRub3RlcyYmbz09dS0xJiZ0aGlzLnJlbmRlck5vdGVzKHRoaXMuY3VycmVudEVuZG5vdGVJZHMsdGhpcy5lbmRub3RlTWFwLGQpLHRoaXMub3B0aW9ucy5yZW5kZXJGb290ZXJzJiZ0aGlzLnJlbmRlckhlYWRlckZvb3RlcihBLmZvb3RlclJlZnMsQSx0Lmxlbmd0aCxpIT1BLGQpLHQucHVzaChkKSxpPUF9cmV0dXJuIHR9cmVuZGVySGVhZGVyRm9vdGVyKGUsdCxuLHMsaSl7aWYoZSl7dmFyIGE9KHQudGl0bGVQYWdlJiZzP2UuZmluZCh1PT51LnR5cGU9PSJmaXJzdCIpOm51bGwpPz8obiUyPT0xP2UuZmluZCh1PT51LnR5cGU9PSJldmVuIik6bnVsbCk/P2UuZmluZCh1PT51LnR5cGU9PSJkZWZhdWx0Iiksbz1hJiZ0aGlzLmRvY3VtZW50LmZpbmRQYXJ0QnlSZWxJZChhLmlkLHRoaXMuZG9jdW1lbnQuZG9jdW1lbnRQYXJ0KTtpZihvKXt0aGlzLmN1cnJlbnRQYXJ0PW8sdGhpcy51c2VkSGVkZXJGb290ZXJQYXJ0cy5pbmNsdWRlcyhvLnBhdGgpfHwodGhpcy5wcm9jZXNzRWxlbWVudChvLnJvb3RFbGVtZW50KSx0aGlzLnVzZWRIZWRlckZvb3RlclBhcnRzLnB1c2goby5wYXRoKSk7Y29uc3RbdV09dGhpcy5yZW5kZXJFbGVtZW50cyhbby5yb290RWxlbWVudF0saSk7dD8ucGFnZU1hcmdpbnMmJihvLnJvb3RFbGVtZW50LnR5cGU9PT1CLkhlYWRlcj8odS5zdHlsZS5tYXJnaW5Ub3A9YGNhbGMoJHt0LnBhZ2VNYXJnaW5zLmhlYWRlcn0gLSAke3QucGFnZU1hcmdpbnMudG9wfSlgLHUuc3R5bGUubWluSGVpZ2h0PWBjYWxjKCR7dC5wYWdlTWFyZ2lucy50b3B9IC0gJHt0LnBhZ2VNYXJnaW5zLmhlYWRlcn0pYCk6by5yb290RWxlbWVudC50eXBlPT09Qi5Gb290ZXImJih1LnN0eWxlLm1hcmdpbkJvdHRvbT1gY2FsYygke3QucGFnZU1hcmdpbnMuZm9vdGVyfSAtICR7dC5wYWdlTWFyZ2lucy5ib3R0b219KWAsdS5zdHlsZS5taW5IZWlnaHQ9YGNhbGMoJHt0LnBhZ2VNYXJnaW5zLmJvdHRvbX0gLSAke3QucGFnZU1hcmdpbnMuZm9vdGVyfSlgKSksdGhpcy5jdXJyZW50UGFydD1udWxsfX19aXNQYWdlQnJlYWtFbGVtZW50KGUpe3JldHVybiBlLnR5cGUhPUIuQnJlYWs/ITE6ZS5icmVhaz09Imxhc3RSZW5kZXJlZFBhZ2VCcmVhayI/IXRoaXMub3B0aW9ucy5pZ25vcmVMYXN0UmVuZGVyZWRQYWdlQnJlYWs6ZS5icmVhaz09InBhZ2UifWlzUGFnZUJyZWFrU2VjdGlvbihlLHQpe3JldHVybiFlfHwhdD8hMTplLnBhZ2VTaXplPy5vcmllbnRhdGlvbiE9dC5wYWdlU2l6ZT8ub3JpZW50YXRpb258fGUucGFnZVNpemU/LndpZHRoIT10LnBhZ2VTaXplPy53aWR0aHx8ZS5wYWdlU2l6ZT8uaGVpZ2h0IT10LnBhZ2VTaXplPy5oZWlnaHR9c3BsaXRCeVNlY3Rpb24oZSx0KXt2YXIgbj17c2VjdFByb3BzOm51bGwsZWxlbWVudHM6W10scGFnZUJyZWFrOiExfSxzPVtuXTtmb3IobGV0IGQgb2YgZSlpZihkLnR5cGU9PUIuUGFyYWdyYXBoJiZ0aGlzLmZpbmRTdHlsZShkLnN0eWxlTmFtZSk/LnBhcmFncmFwaFByb3BzPy5wYWdlQnJlYWtCZWZvcmUmJihuLnNlY3RQcm9wcz1pLG4ucGFnZUJyZWFrPSEwLG49e3NlY3RQcm9wczpudWxsLGVsZW1lbnRzOltdLHBhZ2VCcmVhazohMX0scy5wdXNoKG4pKSxuLmVsZW1lbnRzLnB1c2goZCksZC50eXBlPT1CLlBhcmFncmFwaCl7Y29uc3QgZz1kO3ZhciBpPWcuc2VjdGlvblByb3BzLGE9LTEsbz0tMTtpZih0aGlzLm9wdGlvbnMuYnJlYWtQYWdlcyYmZy5jaGlsZHJlbiYmKGE9Zy5jaGlsZHJlbi5maW5kSW5kZXgoZj0+KG89Zi5jaGlsZHJlbj8uZmluZEluZGV4KHRoaXMuaXNQYWdlQnJlYWtFbGVtZW50LmJpbmQodGhpcykpPz8tMSxvIT0tMSkpKSwoaXx8YSE9LTEpJiYobi5zZWN0UHJvcHM9aSxuLnBhZ2VCcmVhaz1hIT0tMSxuPXtzZWN0UHJvcHM6bnVsbCxlbGVtZW50czpbXSxwYWdlQnJlYWs6ITF9LHMucHVzaChuKSksYSE9LTEpe2xldCBmPWcuY2hpbGRyZW5bYV0sQz1vPGYuY2hpbGRyZW4ubGVuZ3RoLTE7aWYoYTxnLmNoaWxkcmVuLmxlbmd0aC0xfHxDKXt2YXIgdT1kLmNoaWxkcmVuLGw9ey4uLmQsY2hpbGRyZW46dS5zbGljZShhKX07aWYoZC5jaGlsZHJlbj11LnNsaWNlKDAsYSksbi5lbGVtZW50cy5wdXNoKGwpLEMpe2xldCBwPWYuY2hpbGRyZW4sYj17Li4uZixjaGlsZHJlbjpwLnNsaWNlKDAsbyl9O2QuY2hpbGRyZW4ucHVzaChiKSxmLmNoaWxkcmVuPXAuc2xpY2Uobyl9fX19bGV0IEE9bnVsbDtmb3IobGV0IGQ9cy5sZW5ndGgtMTtkPj0wO2QtLSlzW2RdLnNlY3RQcm9wcz09bnVsbD9zW2RdLnNlY3RQcm9wcz1BPz90OkE9c1tkXS5zZWN0UHJvcHM7cmV0dXJuIHN9Z3JvdXBCeVBhZ2VCcmVha3MoZSl7bGV0IHQ9W10sbjtjb25zdCBzPVt0XTtmb3IobGV0IGkgb2YgZSl0LnB1c2goaSksKHRoaXMub3B0aW9ucy5pZ25vcmVMYXN0UmVuZGVyZWRQYWdlQnJlYWt8fGkucGFnZUJyZWFrfHx0aGlzLmlzUGFnZUJyZWFrU2VjdGlvbihuLGkuc2VjdFByb3BzKSkmJnMucHVzaCh0PVtdKSxuPWkuc2VjdFByb3BzO3JldHVybiBzLmZpbHRlcihpPT5pLmxlbmd0aD4wKX1yZW5kZXJXcmFwcGVyKGUpe3JldHVybiB0aGlzLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpgJHt0aGlzLmNsYXNzTmFtZX0td3JhcHBlcmB9LGUpfXJlbmRlckRlZmF1bHRTdHlsZSgpe3ZhciBlPXRoaXMuY2xhc3NOYW1lLHQ9YAouJHtlfS13cmFwcGVyIHsgYmFja2dyb3VuZDogZ3JheTsgcGFkZGluZzogMzBweDsgcGFkZGluZy1ib3R0b206IDBweDsgZGlzcGxheTogZmxleDsgZmxleC1mbG93OiBjb2x1bW47IGFsaWduLWl0ZW1zOiBjZW50ZXI7IH0gCi4ke2V9LXdyYXBwZXI+c2VjdGlvbi4ke2V9IHsgYmFja2dyb3VuZDogd2hpdGU7IGJveC1zaGFkb3c6IDAgMCAxMHB4IHJnYmEoMCwgMCwgMCwgMC41KTsgbWFyZ2luLWJvdHRvbTogMzBweDsgfWA7dGhpcy5vcHRpb25zLmhpZGVXcmFwcGVyT25QcmludCYmKHQ9YEBtZWRpYSBub3QgcHJpbnQgeyAke3R9IH1gKTt2YXIgbj1gJHt0fQouJHtlfSB7IGNvbG9yOiBibGFjazsgaHlwaGVuczogYXV0bzsgdGV4dC11bmRlcmxpbmUtcG9zaXRpb246IGZyb20tZm9udDsgfQpzZWN0aW9uLiR7ZX0geyBib3gtc2l6aW5nOiBib3JkZXItYm94OyBkaXNwbGF5OiBmbGV4OyBmbGV4LWZsb3c6IGNvbHVtbiBub3dyYXA7IHBvc2l0aW9uOiByZWxhdGl2ZTsgb3ZlcmZsb3c6IGhpZGRlbjsgfQpzZWN0aW9uLiR7ZX0+YXJ0aWNsZSB7IG1hcmdpbi1ib3R0b206IGF1dG87IHotaW5kZXg6IDE7IH0Kc2VjdGlvbi4ke2V9PmZvb3RlciB7IHotaW5kZXg6IDE7IH0KLiR7ZX0gdGFibGUgeyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyB9Ci4ke2V9IHRhYmxlIHRkLCAuJHtlfSB0YWJsZSB0aCB7IHZlcnRpY2FsLWFsaWduOiB0b3A7IH0KLiR7ZX0gcCB7IG1hcmdpbjogMHB0OyBtaW4taGVpZ2h0OiAxZW07IH0KLiR7ZX0gc3BhbiB7IHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsgfQouJHtlfSBhIHsgY29sb3I6IGluaGVyaXQ7IHRleHQtZGVjb3JhdGlvbjogaW5oZXJpdDsgfQouJHtlfSBzdmcgeyBmaWxsOiB0cmFuc3BhcmVudDsgfQpgO3JldHVybiB0aGlzLm9wdGlvbnMucmVuZGVyQ29tbWVudHMmJihuKz1gCi4ke2V9LWNvbW1lbnQtcmVmIHsgY3Vyc29yOiBkZWZhdWx0OyB9Ci4ke2V9LWNvbW1lbnQtcG9wb3ZlciB7IGRpc3BsYXk6IG5vbmU7IHotaW5kZXg6IDEwMDA7IHBhZGRpbmc6IDAuNXJlbTsgYmFja2dyb3VuZDogd2hpdGU7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgYm94LXNoYWRvdzogMCAwIDAuMjVyZW0gcmdiYSgwLCAwLCAwLCAwLjI1KTsgd2lkdGg6IDMwY2g7IH0KLiR7ZX0tY29tbWVudC1yZWY6aG92ZXJ+LiR7ZX0tY29tbWVudC1wb3BvdmVyIHsgZGlzcGxheTogYmxvY2s7IH0KLiR7ZX0tY29tbWVudC1hdXRob3IsLiR7ZX0tY29tbWVudC1kYXRlIHsgZm9udC1zaXplOiAwLjg3NXJlbTsgY29sb3I6ICM4ODg7IH0KYCksdGhpcy5jcmVhdGVTdHlsZUVsZW1lbnQobil9cmVuZGVyTnVtYmVyaW5nKGUsdCl7dmFyIG49IiIscz1bXTtmb3IodmFyIGkgb2YgZSl7dmFyIGE9YHAuJHt0aGlzLm51bWJlcmluZ0NsYXNzKGkuaWQsaS5sZXZlbCl9YCxvPSJub25lIjtpZihpLmJ1bGxldCl7bGV0IHU9YC0tJHt0aGlzLmNsYXNzTmFtZX0tJHtpLmJ1bGxldC5zcmN9YC50b0xvd2VyQ2FzZSgpO24rPXRoaXMuc3R5bGVUb1N0cmluZyhgJHthfTpiZWZvcmVgLHtjb250ZW50OiInICciLGRpc3BsYXk6ImlubGluZS1ibG9jayIsYmFja2dyb3VuZDpgdmFyKCR7dX0pYH0saS5idWxsZXQuc3R5bGUpLHRoaXMudGFza3MucHVzaCh0aGlzLmRvY3VtZW50LmxvYWROdW1iZXJpbmdJbWFnZShpLmJ1bGxldC5zcmMpLnRoZW4obD0+e3ZhciBBPWAke3RoaXMucm9vdFNlbGVjdG9yfSB7ICR7dX06IHVybCgke2x9KSB9YDt0LmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlU3R5bGVFbGVtZW50KEEpKX0pKX1lbHNlIGlmKGkubGV2ZWxUZXh0KXtsZXQgdT10aGlzLm51bWJlcmluZ0NvdW50ZXIoaS5pZCxpLmxldmVsKTtjb25zdCBsPXUrIiAiKyhpLnN0YXJ0LTEpO2kubGV2ZWw+MCYmKG4rPXRoaXMuc3R5bGVUb1N0cmluZyhgcC4ke3RoaXMubnVtYmVyaW5nQ2xhc3MoaS5pZCxpLmxldmVsLTEpfWAseyJjb3VudGVyLXNldCI6bH0pKSxzLnB1c2gobCksbis9dGhpcy5zdHlsZVRvU3RyaW5nKGAke2F9OmJlZm9yZWAse2NvbnRlbnQ6dGhpcy5sZXZlbFRleHRUb0NvbnRlbnQoaS5sZXZlbFRleHQsaS5zdWZmLGkuaWQsdGhpcy5udW1Gb3JtYXRUb0Nzc1ZhbHVlKGkuZm9ybWF0KSksImNvdW50ZXItaW5jcmVtZW50Ijp1LC4uLmkuclN0eWxlfSl9ZWxzZSBvPXRoaXMubnVtRm9ybWF0VG9Dc3NWYWx1ZShpLmZvcm1hdCk7bis9dGhpcy5zdHlsZVRvU3RyaW5nKGEse2Rpc3BsYXk6Imxpc3QtaXRlbSIsImxpc3Qtc3R5bGUtcG9zaXRpb24iOiJpbnNpZGUiLCJsaXN0LXN0eWxlLXR5cGUiOm8sLi4uaS5wU3R5bGV9KX1yZXR1cm4gcy5sZW5ndGg+MCYmKG4rPXRoaXMuc3R5bGVUb1N0cmluZyh0aGlzLnJvb3RTZWxlY3Rvcix7ImNvdW50ZXItcmVzZXQiOnMuam9pbigiICIpfSkpLHRoaXMuY3JlYXRlU3R5bGVFbGVtZW50KG4pfXJlbmRlclN0eWxlcyhlKXt2YXIgdD0iIjtjb25zdCBuPXRoaXMuc3R5bGVNYXAscz1qdChlLmZpbHRlcih1PT51LmlzRGVmYXVsdCksdT0+dS50YXJnZXQpO2Zvcihjb25zdCB1IG9mIGUpe3ZhciBpPXUuc3R5bGVzO2lmKHUubGlua2VkKXt2YXIgYT11LmxpbmtlZCYmblt1LmxpbmtlZF07YT9pPWkuY29uY2F0KGEuc3R5bGVzKTp0aGlzLm9wdGlvbnMuZGVidWcmJmNvbnNvbGUud2FybihgQ2FuJ3QgZmluZCBsaW5rZWQgc3R5bGUgJHt1LmxpbmtlZH1gKX1mb3IoY29uc3QgbCBvZiBpKXt2YXIgbz1gJHt1LnRhcmdldD8/IiJ9LiR7dS5jc3NOYW1lfWA7dS50YXJnZXQhPWwudGFyZ2V0JiYobys9YCAke2wudGFyZ2V0fWApLHNbdS50YXJnZXRdPT11JiYobz1gLiR7dGhpcy5jbGFzc05hbWV9ICR7dS50YXJnZXR9LCBgK28pLHQrPXRoaXMuc3R5bGVUb1N0cmluZyhvLGwudmFsdWVzKX19cmV0dXJuIHRoaXMuY3JlYXRlU3R5bGVFbGVtZW50KHQpfXJlbmRlck5vdGVzKGUsdCxuKXt2YXIgcz1lLm1hcChhPT50W2FdKS5maWx0ZXIoYT0+YSk7aWYocy5sZW5ndGg+MCl7dmFyIGk9dGhpcy5jcmVhdGVFbGVtZW50KCJvbCIsbnVsbCx0aGlzLnJlbmRlckVsZW1lbnRzKHMpKTtuLmFwcGVuZENoaWxkKGkpfX1yZW5kZXJFbGVtZW50KGUpe3N3aXRjaChlLnR5cGUpe2Nhc2UgQi5QYXJhZ3JhcGg6cmV0dXJuIHRoaXMucmVuZGVyUGFyYWdyYXBoKGUpO2Nhc2UgQi5Cb29rbWFya1N0YXJ0OnJldHVybiB0aGlzLnJlbmRlckJvb2ttYXJrU3RhcnQoZSk7Y2FzZSBCLkJvb2ttYXJrRW5kOnJldHVybiBudWxsO2Nhc2UgQi5SdW46cmV0dXJuIHRoaXMucmVuZGVyUnVuKGUpO2Nhc2UgQi5UYWJsZTpyZXR1cm4gdGhpcy5yZW5kZXJUYWJsZShlKTtjYXNlIEIuUm93OnJldHVybiB0aGlzLnJlbmRlclRhYmxlUm93KGUpO2Nhc2UgQi5DZWxsOnJldHVybiB0aGlzLnJlbmRlclRhYmxlQ2VsbChlKTtjYXNlIEIuSHlwZXJsaW5rOnJldHVybiB0aGlzLnJlbmRlckh5cGVybGluayhlKTtjYXNlIEIuU21hcnRUYWc6cmV0dXJuIHRoaXMucmVuZGVyU21hcnRUYWcoZSk7Y2FzZSBCLkRyYXdpbmc6cmV0dXJuIHRoaXMucmVuZGVyRHJhd2luZyhlKTtjYXNlIEIuSW1hZ2U6cmV0dXJuIHRoaXMucmVuZGVySW1hZ2UoZSk7Y2FzZSBCLlRleHQ6cmV0dXJuIHRoaXMucmVuZGVyVGV4dChlKTtjYXNlIEIuVGV4dDpyZXR1cm4gdGhpcy5yZW5kZXJUZXh0KGUpO2Nhc2UgQi5EZWxldGVkVGV4dDpyZXR1cm4gdGhpcy5yZW5kZXJEZWxldGVkVGV4dChlKTtjYXNlIEIuVGFiOnJldHVybiB0aGlzLnJlbmRlclRhYihlKTtjYXNlIEIuU3ltYm9sOnJldHVybiB0aGlzLnJlbmRlclN5bWJvbChlKTtjYXNlIEIuQnJlYWs6cmV0dXJuIHRoaXMucmVuZGVyQnJlYWsoZSk7Y2FzZSBCLkZvb3RlcjpyZXR1cm4gdGhpcy5yZW5kZXJDb250YWluZXIoZSwiZm9vdGVyIik7Y2FzZSBCLkhlYWRlcjpyZXR1cm4gdGhpcy5yZW5kZXJDb250YWluZXIoZSwiaGVhZGVyIik7Y2FzZSBCLkZvb3Rub3RlOmNhc2UgQi5FbmRub3RlOnJldHVybiB0aGlzLnJlbmRlckNvbnRhaW5lcihlLCJsaSIpO2Nhc2UgQi5Gb290bm90ZVJlZmVyZW5jZTpyZXR1cm4gdGhpcy5yZW5kZXJGb290bm90ZVJlZmVyZW5jZShlKTtjYXNlIEIuRW5kbm90ZVJlZmVyZW5jZTpyZXR1cm4gdGhpcy5yZW5kZXJFbmRub3RlUmVmZXJlbmNlKGUpO2Nhc2UgQi5Ob0JyZWFrSHlwaGVuOnJldHVybiB0aGlzLmNyZWF0ZUVsZW1lbnQoIndiciIpO2Nhc2UgQi5WbWxQaWN0dXJlOnJldHVybiB0aGlzLnJlbmRlclZtbFBpY3R1cmUoZSk7Y2FzZSBCLlZtbEVsZW1lbnQ6cmV0dXJuIHRoaXMucmVuZGVyVm1sRWxlbWVudChlKTtjYXNlIEIuTW1sTWF0aDpyZXR1cm4gdGhpcy5yZW5kZXJDb250YWluZXJOUyhlLG1lLm1hdGhNTCwibWF0aCIse3htbG5zOm1lLm1hdGhNTH0pO2Nhc2UgQi5NbWxNYXRoUGFyYWdyYXBoOnJldHVybiB0aGlzLnJlbmRlckNvbnRhaW5lcihlLCJzcGFuIik7Y2FzZSBCLk1tbEZyYWN0aW9uOnJldHVybiB0aGlzLnJlbmRlckNvbnRhaW5lck5TKGUsbWUubWF0aE1MLCJtZnJhYyIpO2Nhc2UgQi5NbWxCYXNlOnJldHVybiB0aGlzLnJlbmRlckNvbnRhaW5lck5TKGUsbWUubWF0aE1MLGUucGFyZW50LnR5cGU9PUIuTW1sTWF0cml4Um93PyJtdGQiOiJtcm93Iik7Y2FzZSBCLk1tbE51bWVyYXRvcjpjYXNlIEIuTW1sRGVub21pbmF0b3I6Y2FzZSBCLk1tbEZ1bmN0aW9uOmNhc2UgQi5NbWxMaW1pdDpjYXNlIEIuTW1sQm94OnJldHVybiB0aGlzLnJlbmRlckNvbnRhaW5lck5TKGUsbWUubWF0aE1MLCJtcm93Iik7Y2FzZSBCLk1tbEdyb3VwQ2hhcjpyZXR1cm4gdGhpcy5yZW5kZXJNbWxHcm91cENoYXIoZSk7Y2FzZSBCLk1tbExpbWl0TG93ZXI6cmV0dXJuIHRoaXMucmVuZGVyQ29udGFpbmVyTlMoZSxtZS5tYXRoTUwsIm11bmRlciIpO2Nhc2UgQi5NbWxNYXRyaXg6cmV0dXJuIHRoaXMucmVuZGVyQ29udGFpbmVyTlMoZSxtZS5tYXRoTUwsIm10YWJsZSIpO2Nhc2UgQi5NbWxNYXRyaXhSb3c6cmV0dXJuIHRoaXMucmVuZGVyQ29udGFpbmVyTlMoZSxtZS5tYXRoTUwsIm10ciIpO2Nhc2UgQi5NbWxSYWRpY2FsOnJldHVybiB0aGlzLnJlbmRlck1tbFJhZGljYWwoZSk7Y2FzZSBCLk1tbFN1cGVyc2NyaXB0OnJldHVybiB0aGlzLnJlbmRlckNvbnRhaW5lck5TKGUsbWUubWF0aE1MLCJtc3VwIik7Y2FzZSBCLk1tbFN1YnNjcmlwdDpyZXR1cm4gdGhpcy5yZW5kZXJDb250YWluZXJOUyhlLG1lLm1hdGhNTCwibXN1YiIpO2Nhc2UgQi5NbWxEZWdyZWU6Y2FzZSBCLk1tbFN1cGVyQXJndW1lbnQ6Y2FzZSBCLk1tbFN1YkFyZ3VtZW50OnJldHVybiB0aGlzLnJlbmRlckNvbnRhaW5lck5TKGUsbWUubWF0aE1MLCJtbiIpO2Nhc2UgQi5NbWxGdW5jdGlvbk5hbWU6cmV0dXJuIHRoaXMucmVuZGVyQ29udGFpbmVyTlMoZSxtZS5tYXRoTUwsIm1zIik7Y2FzZSBCLk1tbERlbGltaXRlcjpyZXR1cm4gdGhpcy5yZW5kZXJNbWxEZWxpbWl0ZXIoZSk7Y2FzZSBCLk1tbFJ1bjpyZXR1cm4gdGhpcy5yZW5kZXJNbWxSdW4oZSk7Y2FzZSBCLk1tbE5hcnk6cmV0dXJuIHRoaXMucmVuZGVyTW1sTmFyeShlKTtjYXNlIEIuTW1sUHJlU3ViU3VwZXI6cmV0dXJuIHRoaXMucmVuZGVyTW1sUHJlU3ViU3VwZXIoZSk7Y2FzZSBCLk1tbEJhcjpyZXR1cm4gdGhpcy5yZW5kZXJNbWxCYXIoZSk7Y2FzZSBCLk1tbEVxdWF0aW9uQXJyYXk6cmV0dXJuIHRoaXMucmVuZGVyTWxsTGlzdChlKTtjYXNlIEIuSW5zZXJ0ZWQ6cmV0dXJuIHRoaXMucmVuZGVySW5zZXJ0ZWQoZSk7Y2FzZSBCLkRlbGV0ZWQ6cmV0dXJuIHRoaXMucmVuZGVyRGVsZXRlZChlKTtjYXNlIEIuQ29tbWVudFJhbmdlU3RhcnQ6cmV0dXJuIHRoaXMucmVuZGVyQ29tbWVudFJhbmdlU3RhcnQoZSk7Y2FzZSBCLkNvbW1lbnRSYW5nZUVuZDpyZXR1cm4gdGhpcy5yZW5kZXJDb21tZW50UmFuZ2VFbmQoZSk7Y2FzZSBCLkNvbW1lbnRSZWZlcmVuY2U6cmV0dXJuIHRoaXMucmVuZGVyQ29tbWVudFJlZmVyZW5jZShlKTtjYXNlIEIuQWx0Q2h1bms6cmV0dXJuIHRoaXMucmVuZGVyQWx0Q2h1bmsoZSl9cmV0dXJuIG51bGx9cmVuZGVyRWxlbWVudHMoZSx0KXtpZihlPT1udWxsKXJldHVybiBudWxsO3ZhciBuPWUuZmxhdE1hcChzPT50aGlzLnJlbmRlckVsZW1lbnQocykpLmZpbHRlcihzPT5zIT1udWxsKTtyZXR1cm4gdCYmaWkodCxuKSxufXJlbmRlckNvbnRhaW5lcihlLHQsbil7cmV0dXJuIHRoaXMuY3JlYXRlRWxlbWVudCh0LG4sdGhpcy5yZW5kZXJFbGVtZW50cyhlLmNoaWxkcmVuKSl9cmVuZGVyQ29udGFpbmVyTlMoZSx0LG4scyl7cmV0dXJuIHRoaXMuY3JlYXRlRWxlbWVudE5TKHQsbixzLHRoaXMucmVuZGVyRWxlbWVudHMoZS5jaGlsZHJlbikpfXJlbmRlclBhcmFncmFwaChlKXt2YXIgdD10aGlzLnJlbmRlckNvbnRhaW5lcihlLCJwIik7Y29uc3Qgbj10aGlzLmZpbmRTdHlsZShlLnN0eWxlTmFtZSk7ZS50YWJzPz8oZS50YWJzPW4/LnBhcmFncmFwaFByb3BzPy50YWJzKSx0aGlzLnJlbmRlckNsYXNzKGUsdCksdGhpcy5yZW5kZXJTdHlsZVZhbHVlcyhlLmNzc1N0eWxlLHQpLHRoaXMucmVuZGVyQ29tbW9uUHJvcGVydGllcyh0LnN0eWxlLGUpO2NvbnN0IHM9ZS5udW1iZXJpbmc/P24/LnBhcmFncmFwaFByb3BzPy5udW1iZXJpbmc7cmV0dXJuIHMmJnQuY2xhc3NMaXN0LmFkZCh0aGlzLm51bWJlcmluZ0NsYXNzKHMuaWQscy5sZXZlbCkpLHR9cmVuZGVyUnVuUHJvcGVydGllcyhlLHQpe3RoaXMucmVuZGVyQ29tbW9uUHJvcGVydGllcyhlLHQpfXJlbmRlckNvbW1vblByb3BlcnRpZXMoZSx0KXt0IT1udWxsJiYodC5jb2xvciYmKGUuY29sb3I9dC5jb2xvciksdC5mb250U2l6ZSYmKGVbImZvbnQtc2l6ZSJdPXQuZm9udFNpemUpKX1yZW5kZXJIeXBlcmxpbmsoZSl7dmFyIHQ9dGhpcy5yZW5kZXJDb250YWluZXIoZSwiYSIpO3RoaXMucmVuZGVyU3R5bGVWYWx1ZXMoZS5jc3NTdHlsZSx0KTtsZXQgbj0iIjtyZXR1cm4gZS5pZCYmKG49dGhpcy5kb2N1bWVudC5kb2N1bWVudFBhcnQucmVscy5maW5kKGk9PmkuaWQ9PWUuaWQmJmkudGFyZ2V0TW9kZT09PSJFeHRlcm5hbCIpPy50YXJnZXQ/P24pLGUuYW5jaG9yJiYobis9YCMke2UuYW5jaG9yfWApLHQuaHJlZj1uLHR9cmVuZGVyU21hcnRUYWcoZSl7cmV0dXJuIHRoaXMucmVuZGVyQ29udGFpbmVyKGUsInNwYW4iKX1yZW5kZXJDb21tZW50UmFuZ2VTdGFydChlKXtpZighdGhpcy5vcHRpb25zLnJlbmRlckNvbW1lbnRzKXJldHVybiBudWxsO2NvbnN0IHQ9bmV3IFJhbmdlO3RoaXMuY29tbWVudEhpZ2hsaWdodD8uYWRkKHQpO2NvbnN0IG49dGhpcy5jcmVhdGVDb21tZW50KGBzdGFydCBvZiBjb21tZW50ICMke2UuaWR9YCk7cmV0dXJuIHRoaXMubGF0ZXIoKCk9PnQuc2V0U3RhcnQobiwwKSksdGhpcy5jb21tZW50TWFwW2UuaWRdPXQsbn1yZW5kZXJDb21tZW50UmFuZ2VFbmQoZSl7aWYoIXRoaXMub3B0aW9ucy5yZW5kZXJDb21tZW50cylyZXR1cm4gbnVsbDtjb25zdCB0PXRoaXMuY29tbWVudE1hcFtlLmlkXSxuPXRoaXMuY3JlYXRlQ29tbWVudChgZW5kIG9mIGNvbW1lbnQgIyR7ZS5pZH1gKTtyZXR1cm4gdGhpcy5sYXRlcigoKT0+dD8uc2V0RW5kKG4sMCkpLG59cmVuZGVyQ29tbWVudFJlZmVyZW5jZShlKXtpZighdGhpcy5vcHRpb25zLnJlbmRlckNvbW1lbnRzKXJldHVybiBudWxsO3ZhciB0PXRoaXMuZG9jdW1lbnQuY29tbWVudHNQYXJ0Py5jb21tZW50TWFwW2UuaWRdO2lmKCF0KXJldHVybiBudWxsO2NvbnN0IG49bmV3IERvY3VtZW50RnJhZ21lbnQscz10aGlzLmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6YCR7dGhpcy5jbGFzc05hbWV9LWNvbW1lbnQtcmVmYH0sWyLwn5KsIl0pLGk9dGhpcy5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6YCR7dGhpcy5jbGFzc05hbWV9LWNvbW1lbnQtcG9wb3ZlcmB9KTtyZXR1cm4gdGhpcy5yZW5kZXJDb21tZW50Q29udGVudCh0LGkpLG4uYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVDb21tZW50KGBjb21tZW50ICMke3QuaWR9IGJ5ICR7dC5hdXRob3J9IG9uICR7dC5kYXRlfWApKSxuLmFwcGVuZENoaWxkKHMpLG4uYXBwZW5kQ2hpbGQoaSksbn1yZW5kZXJBbHRDaHVuayhlKXtpZighdGhpcy5vcHRpb25zLnJlbmRlckFsdENodW5rcylyZXR1cm4gbnVsbDt2YXIgdD10aGlzLmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpO3JldHVybiB0aGlzLnRhc2tzLnB1c2godGhpcy5kb2N1bWVudC5sb2FkQWx0Q2h1bmsoZS5pZCx0aGlzLmN1cnJlbnRQYXJ0KS50aGVuKG49Pnt0LnNyY2RvYz1ufSkpLHR9cmVuZGVyQ29tbWVudENvbnRlbnQoZSx0KXt0LmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmAke3RoaXMuY2xhc3NOYW1lfS1jb21tZW50LWF1dGhvcmB9LFtlLmF1dGhvcl0pKSx0LmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmAke3RoaXMuY2xhc3NOYW1lfS1jb21tZW50LWRhdGVgfSxbbmV3IERhdGUoZS5kYXRlKS50b0xvY2FsZVN0cmluZygpXSkpLHRoaXMucmVuZGVyRWxlbWVudHMoZS5jaGlsZHJlbix0KX1yZW5kZXJEcmF3aW5nKGUpe3ZhciB0PXRoaXMucmVuZGVyQ29udGFpbmVyKGUsImRpdiIpO3JldHVybiB0LnN0eWxlLmRpc3BsYXk9ImlubGluZS1ibG9jayIsdC5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLHQuc3R5bGUudGV4dEluZGVudD0iMHB4Iix0aGlzLnJlbmRlclN0eWxlVmFsdWVzKGUuY3NzU3R5bGUsdCksdH1yZW5kZXJJbWFnZShlKXtsZXQgdD10aGlzLmNyZWF0ZUVsZW1lbnQoImltZyIpLG49ZS5jc3NTdHlsZT8udHJhbnNmb3JtO2lmKHRoaXMucmVuZGVyU3R5bGVWYWx1ZXMoZS5jc3NTdHlsZSx0KSxlLnNyY1JlY3QmJmUuc3JjUmVjdC5zb21lKHU9PnUhPTApKXt2YXJbcyxpLGEsb109ZS5zcmNSZWN0O249YHNjYWxlKCR7MS8oMS1zLWEpfSwgJHsxLygxLWktbyl9KWAsdC5zdHlsZVsiY2xpcC1wYXRoIl09YHJlY3QoJHsoMTAwKmkpLnRvRml4ZWQoMil9JSAkeygxMDAqKDEtYSkpLnRvRml4ZWQoMil9JSAkeygxMDAqKDEtbykpLnRvRml4ZWQoMil9JSAkeygxMDAqcykudG9GaXhlZCgyKX0lKWB9cmV0dXJuIGUucm90YXRpb24mJihuPWByb3RhdGUoJHtlLnJvdGF0aW9ufWRlZykgJHtuPz8iIn1gKSx0LnN0eWxlLnRyYW5zZm9ybT1uPy50cmltKCksdGhpcy5kb2N1bWVudCYmdGhpcy50YXNrcy5wdXNoKHRoaXMuZG9jdW1lbnQubG9hZERvY3VtZW50SW1hZ2UoZS5zcmMsdGhpcy5jdXJyZW50UGFydCkudGhlbih1PT57dC5zcmM9dX0pKSx0fXJlbmRlclRleHQoZSl7cmV0dXJuIHRoaXMuaHRtbERvY3VtZW50LmNyZWF0ZVRleHROb2RlKGUudGV4dCl9cmVuZGVyRGVsZXRlZFRleHQoZSl7cmV0dXJuIHRoaXMub3B0aW9ucy5yZW5kZXJDaGFuZ2VzP3RoaXMucmVuZGVyVGV4dChlKTpudWxsfXJlbmRlckJyZWFrKGUpe3JldHVybiBlLmJyZWFrPT0idGV4dFdyYXBwaW5nIj90aGlzLmNyZWF0ZUVsZW1lbnQoImJyIik6bnVsbH1yZW5kZXJJbnNlcnRlZChlKXtyZXR1cm4gdGhpcy5vcHRpb25zLnJlbmRlckNoYW5nZXM/dGhpcy5yZW5kZXJDb250YWluZXIoZSwiaW5zIik6dGhpcy5yZW5kZXJFbGVtZW50cyhlLmNoaWxkcmVuKX1yZW5kZXJEZWxldGVkKGUpe3JldHVybiB0aGlzLm9wdGlvbnMucmVuZGVyQ2hhbmdlcz90aGlzLnJlbmRlckNvbnRhaW5lcihlLCJkZWwiKTpudWxsfXJlbmRlclN5bWJvbChlKXt2YXIgdD10aGlzLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtyZXR1cm4gdC5zdHlsZS5mb250RmFtaWx5PWUuZm9udCx0LmlubmVySFRNTD1gJiN4JHtlLmNoYXJ9O2AsdH1yZW5kZXJGb290bm90ZVJlZmVyZW5jZShlKXt2YXIgdD10aGlzLmNyZWF0ZUVsZW1lbnQoInN1cCIpO3JldHVybiB0aGlzLmN1cnJlbnRGb290bm90ZUlkcy5wdXNoKGUuaWQpLHQudGV4dENvbnRlbnQ9YCR7dGhpcy5jdXJyZW50Rm9vdG5vdGVJZHMubGVuZ3RofWAsdH1yZW5kZXJFbmRub3RlUmVmZXJlbmNlKGUpe3ZhciB0PXRoaXMuY3JlYXRlRWxlbWVudCgic3VwIik7cmV0dXJuIHRoaXMuY3VycmVudEVuZG5vdGVJZHMucHVzaChlLmlkKSx0LnRleHRDb250ZW50PWAke3RoaXMuY3VycmVudEVuZG5vdGVJZHMubGVuZ3RofWAsdH1yZW5kZXJUYWIoZSl7dmFyIHQ9dGhpcy5jcmVhdGVFbGVtZW50KCJzcGFuIik7aWYodC5pbm5lckhUTUw9IiZlbXNwOyIsdGhpcy5vcHRpb25zLmV4cGVyaW1lbnRhbCl7dC5jbGFzc05hbWU9dGhpcy50YWJTdG9wQ2xhc3MoKTt2YXIgbj1yZChlLEIuUGFyYWdyYXBoKT8udGFiczt0aGlzLmN1cnJlbnRUYWJzLnB1c2goe3N0b3BzOm4sc3Bhbjp0fSl9cmV0dXJuIHR9cmVuZGVyQm9va21hcmtTdGFydChlKXtyZXR1cm4gdGhpcy5jcmVhdGVFbGVtZW50KCJzcGFuIix7aWQ6ZS5uYW1lfSl9cmVuZGVyUnVuKGUpe2lmKGUuZmllbGRSdW4pcmV0dXJuIG51bGw7Y29uc3QgdD10aGlzLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtpZihlLmlkJiYodC5pZD1lLmlkKSx0aGlzLnJlbmRlckNsYXNzKGUsdCksdGhpcy5yZW5kZXJTdHlsZVZhbHVlcyhlLmNzc1N0eWxlLHQpLGUudmVydGljYWxBbGlnbil7Y29uc3Qgbj10aGlzLmNyZWF0ZUVsZW1lbnQoZS52ZXJ0aWNhbEFsaWduKTt0aGlzLnJlbmRlckVsZW1lbnRzKGUuY2hpbGRyZW4sbiksdC5hcHBlbmRDaGlsZChuKX1lbHNlIHRoaXMucmVuZGVyRWxlbWVudHMoZS5jaGlsZHJlbix0KTtyZXR1cm4gdH1yZW5kZXJUYWJsZShlKXtsZXQgdD10aGlzLmNyZWF0ZUVsZW1lbnQoInRhYmxlIik7cmV0dXJuIHRoaXMudGFibGVDZWxsUG9zaXRpb25zLnB1c2godGhpcy5jdXJyZW50Q2VsbFBvc2l0aW9uKSx0aGlzLnRhYmxlVmVydGljYWxNZXJnZXMucHVzaCh0aGlzLmN1cnJlbnRWZXJ0aWNhbE1lcmdlKSx0aGlzLmN1cnJlbnRWZXJ0aWNhbE1lcmdlPXt9LHRoaXMuY3VycmVudENlbGxQb3NpdGlvbj17Y29sOjAscm93OjB9LGUuY29sdW1ucyYmdC5hcHBlbmRDaGlsZCh0aGlzLnJlbmRlclRhYmxlQ29sdW1ucyhlLmNvbHVtbnMpKSx0aGlzLnJlbmRlckNsYXNzKGUsdCksdGhpcy5yZW5kZXJFbGVtZW50cyhlLmNoaWxkcmVuLHQpLHRoaXMucmVuZGVyU3R5bGVWYWx1ZXMoZS5jc3NTdHlsZSx0KSx0aGlzLmN1cnJlbnRWZXJ0aWNhbE1lcmdlPXRoaXMudGFibGVWZXJ0aWNhbE1lcmdlcy5wb3AoKSx0aGlzLmN1cnJlbnRDZWxsUG9zaXRpb249dGhpcy50YWJsZUNlbGxQb3NpdGlvbnMucG9wKCksdH1yZW5kZXJUYWJsZUNvbHVtbnMoZSl7bGV0IHQ9dGhpcy5jcmVhdGVFbGVtZW50KCJjb2xncm91cCIpO2ZvcihsZXQgbiBvZiBlKXtsZXQgcz10aGlzLmNyZWF0ZUVsZW1lbnQoImNvbCIpO24ud2lkdGgmJihzLnN0eWxlLndpZHRoPW4ud2lkdGgpLHQuYXBwZW5kQ2hpbGQocyl9cmV0dXJuIHR9cmVuZGVyVGFibGVSb3coZSl7bGV0IHQ9dGhpcy5jcmVhdGVFbGVtZW50KCJ0ciIpO3JldHVybiB0aGlzLmN1cnJlbnRDZWxsUG9zaXRpb24uY29sPTAsZS5ncmlkQmVmb3JlJiZ0LmFwcGVuZENoaWxkKHRoaXMucmVuZGVyVGFibGVDZWxsUGxhY2Vob2xkZXIoZS5ncmlkQmVmb3JlKSksdGhpcy5yZW5kZXJDbGFzcyhlLHQpLHRoaXMucmVuZGVyRWxlbWVudHMoZS5jaGlsZHJlbix0KSx0aGlzLnJlbmRlclN0eWxlVmFsdWVzKGUuY3NzU3R5bGUsdCksZS5ncmlkQWZ0ZXImJnQuYXBwZW5kQ2hpbGQodGhpcy5yZW5kZXJUYWJsZUNlbGxQbGFjZWhvbGRlcihlLmdyaWRBZnRlcikpLHRoaXMuY3VycmVudENlbGxQb3NpdGlvbi5yb3crKyx0fXJlbmRlclRhYmxlQ2VsbFBsYWNlaG9sZGVyKGUpe2NvbnN0IHQ9dGhpcy5jcmVhdGVFbGVtZW50KCJ0ZCIse2NvbFNwYW46ZX0pO3JldHVybiB0LnN0eWxlLmJvcmRlcj0ibm9uZSIsdH1yZW5kZXJUYWJsZUNlbGwoZSl7bGV0IHQ9dGhpcy5yZW5kZXJDb250YWluZXIoZSwidGQiKTtjb25zdCBuPXRoaXMuY3VycmVudENlbGxQb3NpdGlvbi5jb2w7cmV0dXJuIGUudmVydGljYWxNZXJnZT9lLnZlcnRpY2FsTWVyZ2U9PSJyZXN0YXJ0Ij8odGhpcy5jdXJyZW50VmVydGljYWxNZXJnZVtuXT10LHQucm93U3Bhbj0xKTp0aGlzLmN1cnJlbnRWZXJ0aWNhbE1lcmdlW25dJiYodGhpcy5jdXJyZW50VmVydGljYWxNZXJnZVtuXS5yb3dTcGFuKz0xLHQuc3R5bGUuZGlzcGxheT0ibm9uZSIpOnRoaXMuY3VycmVudFZlcnRpY2FsTWVyZ2Vbbl09bnVsbCx0aGlzLnJlbmRlckNsYXNzKGUsdCksdGhpcy5yZW5kZXJTdHlsZVZhbHVlcyhlLmNzc1N0eWxlLHQpLGUuc3BhbiYmKHQuY29sU3Bhbj1lLnNwYW4pLHRoaXMuY3VycmVudENlbGxQb3NpdGlvbi5jb2wrPXQuY29sU3Bhbix0fXJlbmRlclZtbFBpY3R1cmUoZSl7cmV0dXJuIHRoaXMucmVuZGVyQ29udGFpbmVyKGUsImRpdiIpfXJlbmRlclZtbEVsZW1lbnQoZSl7dmFyIHQ9dGhpcy5jcmVhdGVTdmdFbGVtZW50KCJzdmciKTt0LnNldEF0dHJpYnV0ZSgic3R5bGUiLGUuY3NzU3R5bGVUZXh0KTtjb25zdCBuPXRoaXMucmVuZGVyVm1sQ2hpbGRFbGVtZW50KGUpO3JldHVybiBlLmltYWdlSHJlZj8uaWQmJnRoaXMudGFza3MucHVzaCh0aGlzLmRvY3VtZW50Py5sb2FkRG9jdW1lbnRJbWFnZShlLmltYWdlSHJlZi5pZCx0aGlzLmN1cnJlbnRQYXJ0KS50aGVuKHM9Pm4uc2V0QXR0cmlidXRlKCJocmVmIixzKSkpLHQuYXBwZW5kQ2hpbGQobikscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57Y29uc3Qgcz10LmZpcnN0RWxlbWVudENoaWxkLmdldEJCb3goKTt0LnNldEF0dHJpYnV0ZSgid2lkdGgiLGAke01hdGguY2VpbChzLngrcy53aWR0aCl9YCksdC5zZXRBdHRyaWJ1dGUoImhlaWdodCIsYCR7TWF0aC5jZWlsKHMueStzLmhlaWdodCl9YCl9KSx0fXJlbmRlclZtbENoaWxkRWxlbWVudChlKXtjb25zdCB0PXRoaXMuY3JlYXRlU3ZnRWxlbWVudChlLnRhZ05hbWUpO09iamVjdC5lbnRyaWVzKGUuYXR0cnMpLmZvckVhY2goKFtuLHNdKT0+dC5zZXRBdHRyaWJ1dGUobixzKSk7Zm9yKGxldCBuIG9mIGUuY2hpbGRyZW4pbi50eXBlPT1CLlZtbEVsZW1lbnQ/dC5hcHBlbmRDaGlsZCh0aGlzLnJlbmRlclZtbENoaWxkRWxlbWVudChuKSk6dC5hcHBlbmRDaGlsZCguLi5zbih0aGlzLnJlbmRlckVsZW1lbnQobikpKTtyZXR1cm4gdH1yZW5kZXJNbWxSYWRpY2FsKGUpe2NvbnN0IHQ9ZS5jaGlsZHJlbi5maW5kKHM9PnMudHlwZT09Qi5NbWxCYXNlKTtpZihlLnByb3BzPy5oaWRlRGVncmVlKXJldHVybiB0aGlzLmNyZWF0ZUVsZW1lbnROUyhtZS5tYXRoTUwsIm1zcXJ0IixudWxsLHRoaXMucmVuZGVyRWxlbWVudHMoW3RdKSk7Y29uc3Qgbj1lLmNoaWxkcmVuLmZpbmQocz0+cy50eXBlPT1CLk1tbERlZ3JlZSk7cmV0dXJuIHRoaXMuY3JlYXRlRWxlbWVudE5TKG1lLm1hdGhNTCwibXJvb3QiLG51bGwsdGhpcy5yZW5kZXJFbGVtZW50cyhbdCxuXSkpfXJlbmRlck1tbERlbGltaXRlcihlKXtjb25zdCB0PVtdO3JldHVybiB0LnB1c2godGhpcy5jcmVhdGVFbGVtZW50TlMobWUubWF0aE1MLCJtbyIsbnVsbCxbZS5wcm9wcy5iZWdpbkNoYXI/PyIoIl0pKSx0LnB1c2goLi4udGhpcy5yZW5kZXJFbGVtZW50cyhlLmNoaWxkcmVuKSksdC5wdXNoKHRoaXMuY3JlYXRlRWxlbWVudE5TKG1lLm1hdGhNTCwibW8iLG51bGwsW2UucHJvcHMuZW5kQ2hhcj8/IikiXSkpLHRoaXMuY3JlYXRlRWxlbWVudE5TKG1lLm1hdGhNTCwibXJvdyIsbnVsbCx0KX1yZW5kZXJNbWxOYXJ5KGUpe2NvbnN0IHQ9W10sbj1qdChlLmNoaWxkcmVuLGw9PmwudHlwZSkscz1uW0IuTW1sU3VwZXJBcmd1bWVudF0saT1uW0IuTW1sU3ViQXJndW1lbnRdLGE9cz90aGlzLmNyZWF0ZUVsZW1lbnROUyhtZS5tYXRoTUwsIm1vIixudWxsLHNuKHRoaXMucmVuZGVyRWxlbWVudChzKSkpOm51bGwsbz1pP3RoaXMuY3JlYXRlRWxlbWVudE5TKG1lLm1hdGhNTCwibW8iLG51bGwsc24odGhpcy5yZW5kZXJFbGVtZW50KGkpKSk6bnVsbCx1PXRoaXMuY3JlYXRlRWxlbWVudE5TKG1lLm1hdGhNTCwibW8iLG51bGwsW2UucHJvcHM/LmNoYXI/PyLiiKsiXSk7cmV0dXJuIGF8fG8/dC5wdXNoKHRoaXMuY3JlYXRlRWxlbWVudE5TKG1lLm1hdGhNTCwibXVuZGVyb3ZlciIsbnVsbCxbdSxvLGFdKSk6YT90LnB1c2godGhpcy5jcmVhdGVFbGVtZW50TlMobWUubWF0aE1MLCJtb3ZlciIsbnVsbCxbdSxhXSkpOm8/dC5wdXNoKHRoaXMuY3JlYXRlRWxlbWVudE5TKG1lLm1hdGhNTCwibXVuZGVyIixudWxsLFt1LG9dKSk6dC5wdXNoKHUpLHQucHVzaCguLi50aGlzLnJlbmRlckVsZW1lbnRzKG5bQi5NbWxCYXNlXS5jaGlsZHJlbikpLHRoaXMuY3JlYXRlRWxlbWVudE5TKG1lLm1hdGhNTCwibXJvdyIsbnVsbCx0KX1yZW5kZXJNbWxQcmVTdWJTdXBlcihlKXtjb25zdCB0PVtdLG49anQoZS5jaGlsZHJlbixsPT5sLnR5cGUpLHM9bltCLk1tbFN1cGVyQXJndW1lbnRdLGk9bltCLk1tbFN1YkFyZ3VtZW50XSxhPXM/dGhpcy5jcmVhdGVFbGVtZW50TlMobWUubWF0aE1MLCJtbyIsbnVsbCxzbih0aGlzLnJlbmRlckVsZW1lbnQocykpKTpudWxsLG89aT90aGlzLmNyZWF0ZUVsZW1lbnROUyhtZS5tYXRoTUwsIm1vIixudWxsLHNuKHRoaXMucmVuZGVyRWxlbWVudChpKSkpOm51bGwsdT10aGlzLmNyZWF0ZUVsZW1lbnROUyhtZS5tYXRoTUwsIm1vIixudWxsKTtyZXR1cm4gdC5wdXNoKHRoaXMuY3JlYXRlRWxlbWVudE5TKG1lLm1hdGhNTCwibXN1YnN1cCIsbnVsbCxbdSxvLGFdKSksdC5wdXNoKC4uLnRoaXMucmVuZGVyRWxlbWVudHMobltCLk1tbEJhc2VdLmNoaWxkcmVuKSksdGhpcy5jcmVhdGVFbGVtZW50TlMobWUubWF0aE1MLCJtcm93IixudWxsLHQpfXJlbmRlck1tbEdyb3VwQ2hhcihlKXtjb25zdCB0PWUucHJvcHMudmVydGljYWxKdXN0aWZpY2F0aW9uPT09ImJvdCI/Im1vdmVyIjoibXVuZGVyIixuPXRoaXMucmVuZGVyQ29udGFpbmVyTlMoZSxtZS5tYXRoTUwsdCk7cmV0dXJuIGUucHJvcHMuY2hhciYmbi5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUVsZW1lbnROUyhtZS5tYXRoTUwsIm1vIixudWxsLFtlLnByb3BzLmNoYXJdKSksbn1yZW5kZXJNbWxCYXIoZSl7Y29uc3QgdD10aGlzLnJlbmRlckNvbnRhaW5lck5TKGUsbWUubWF0aE1MLCJtcm93Iik7c3dpdGNoKGUucHJvcHMucG9zaXRpb24pe2Nhc2UidG9wIjp0LnN0eWxlLnRleHREZWNvcmF0aW9uPSJvdmVybGluZSI7YnJlYWs7Y2FzZSJib3R0b20iOnQuc3R5bGUudGV4dERlY29yYXRpb249InVuZGVybGluZSI7YnJlYWt9cmV0dXJuIHR9cmVuZGVyTW1sUnVuKGUpe2NvbnN0IHQ9dGhpcy5jcmVhdGVFbGVtZW50TlMobWUubWF0aE1MLCJtcyIsbnVsbCx0aGlzLnJlbmRlckVsZW1lbnRzKGUuY2hpbGRyZW4pKTtyZXR1cm4gdGhpcy5yZW5kZXJDbGFzcyhlLHQpLHRoaXMucmVuZGVyU3R5bGVWYWx1ZXMoZS5jc3NTdHlsZSx0KSx0fXJlbmRlck1sbExpc3QoZSl7Y29uc3QgdD10aGlzLmNyZWF0ZUVsZW1lbnROUyhtZS5tYXRoTUwsIm10YWJsZSIpO3RoaXMucmVuZGVyQ2xhc3MoZSx0KSx0aGlzLnJlbmRlclN0eWxlVmFsdWVzKGUuY3NzU3R5bGUsdCk7Zm9yKGxldCBuIG9mIHRoaXMucmVuZGVyRWxlbWVudHMoZS5jaGlsZHJlbikpdC5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUVsZW1lbnROUyhtZS5tYXRoTUwsIm10ciIsbnVsbCxbdGhpcy5jcmVhdGVFbGVtZW50TlMobWUubWF0aE1MLCJtdGQiLG51bGwsW25dKV0pKTtyZXR1cm4gdH1yZW5kZXJTdHlsZVZhbHVlcyhlLHQpe2ZvcihsZXQgbiBpbiBlKW4uc3RhcnRzV2l0aCgiJCIpP3Quc2V0QXR0cmlidXRlKG4uc2xpY2UoMSksZVtuXSk6dC5zdHlsZVtuXT1lW25dfXJlbmRlckNsYXNzKGUsdCl7ZS5jbGFzc05hbWUmJih0LmNsYXNzTmFtZT1lLmNsYXNzTmFtZSksZS5zdHlsZU5hbWUmJnQuY2xhc3NMaXN0LmFkZCh0aGlzLnByb2Nlc3NTdHlsZU5hbWUoZS5zdHlsZU5hbWUpKX1maW5kU3R5bGUoZSl7cmV0dXJuIGUmJnRoaXMuc3R5bGVNYXA/LltlXX1udW1iZXJpbmdDbGFzcyhlLHQpe3JldHVybmAke3RoaXMuY2xhc3NOYW1lfS1udW0tJHtlfS0ke3R9YH10YWJTdG9wQ2xhc3MoKXtyZXR1cm5gJHt0aGlzLmNsYXNzTmFtZX0tdGFiLXN0b3BgfXN0eWxlVG9TdHJpbmcoZSx0LG49bnVsbCl7bGV0IHM9YCR7ZX0ge1xyCmA7Zm9yKGNvbnN0IGkgaW4gdClpLnN0YXJ0c1dpdGgoIiQiKXx8KHMrPWAgICR7aX06ICR7dFtpXX07XHIKYCk7cmV0dXJuIG4mJihzKz1uKSxzK2B9XHIKYH1udW1iZXJpbmdDb3VudGVyKGUsdCl7cmV0dXJuYCR7dGhpcy5jbGFzc05hbWV9LW51bS0ke2V9LSR7dH1gfWxldmVsVGV4dFRvQ29udGVudChlLHQsbixzKXtjb25zdCBpPXt0YWI6IlxcOSIsc3BhY2U6IlxcYTAifTt2YXIgYT1lLnJlcGxhY2UoLyVcZCovZyxvPT57bGV0IHU9cGFyc2VJbnQoby5zdWJzdHJpbmcoMSksMTApLTE7cmV0dXJuYCJjb3VudGVyKCR7dGhpcy5udW1iZXJpbmdDb3VudGVyKG4sdSl9LCAke3N9KSJgfSk7cmV0dXJuYCIke2F9JHtpW3RdPz8iIn0iYH1udW1Gb3JtYXRUb0Nzc1ZhbHVlKGUpe3ZhciB0PXtub25lOiJub25lIixidWxsZXQ6ImRpc2MiLGRlY2ltYWw6ImRlY2ltYWwiLGxvd2VyTGV0dGVyOiJsb3dlci1hbHBoYSIsdXBwZXJMZXR0ZXI6InVwcGVyLWFscGhhIixsb3dlclJvbWFuOiJsb3dlci1yb21hbiIsdXBwZXJSb21hbjoidXBwZXItcm9tYW4iLGRlY2ltYWxaZXJvOiJkZWNpbWFsLWxlYWRpbmctemVybyIsYWl1ZW86ImthdGFrYW5hIixhaXVlb0Z1bGxXaWR0aDoia2F0YWthbmEiLGNoaW5lc2VDb3VudGluZzoic2ltcC1jaGluZXNlLWluZm9ybWFsIixjaGluZXNlQ291bnRpbmdUaG91c2FuZDoic2ltcC1jaGluZXNlLWluZm9ybWFsIixjaGluZXNlTGVnYWxTaW1wbGlmaWVkOiJzaW1wLWNoaW5lc2UtZm9ybWFsIixjaG9zdW5nOiJoYW5ndWwtY29uc29uYW50IixpZGVvZ3JhcGhEaWdpdGFsOiJjamstaWRlb2dyYXBoaWMiLGlkZW9ncmFwaFRyYWRpdGlvbmFsOiJjamstaGVhdmVubHktc3RlbSIsaWRlb2dyYXBoTGVnYWxUcmFkaXRpb25hbDoidHJhZC1jaGluZXNlLWZvcm1hbCIsaWRlb2dyYXBoWm9kaWFjOiJjamstZWFydGhseS1icmFuY2giLGlyb2hhOiJrYXRha2FuYS1pcm9oYSIsaXJvaGFGdWxsV2lkdGg6ImthdGFrYW5hLWlyb2hhIixqYXBhbmVzZUNvdW50aW5nOiJqYXBhbmVzZS1pbmZvcm1hbCIsamFwYW5lc2VEaWdpdGFsVGVuVGhvdXNhbmQ6ImNqay1kZWNpbWFsIixqYXBhbmVzZUxlZ2FsOiJqYXBhbmVzZS1mb3JtYWwiLHRoYWlOdW1iZXJzOiJ0aGFpIixrb3JlYW5Db3VudGluZzoia29yZWFuLWhhbmd1bC1mb3JtYWwiLGtvcmVhbkRpZ2l0YWw6ImtvcmVhbi1oYW5ndWwtZm9ybWFsIixrb3JlYW5EaWdpdGFsMjoia29yZWFuLWhhbmphLWluZm9ybWFsIixoZWJyZXcxOiJoZWJyZXciLGhlYnJldzI6ImhlYnJldyIsaGluZGlOdW1iZXJzOiJkZXZhbmFnYXJpIixnYW5hZGE6Imhhbmd1bCIsdGFpd2FuZXNlQ291bnRpbmc6ImNqay1pZGVvZ3JhcGhpYyIsdGFpd2FuZXNlQ291bnRpbmdUaG91c2FuZDoiY2prLWlkZW9ncmFwaGljIix0YWl3YW5lc2VEaWdpdGFsOiJjamstZGVjaW1hbCJ9O3JldHVybiB0W2VdPz9lfXJlZnJlc2hUYWJTdG9wcygpe3RoaXMub3B0aW9ucy5leHBlcmltZW50YWwmJnNldFRpbWVvdXQoKCk9Pntjb25zdCBlPSRBKCk7Zm9yKGxldCB0IG9mIHRoaXMuY3VycmVudFRhYnMpZWQodC5zcGFuLHQuc3RvcHMsdGhpcy5kZWZhdWx0VGFiU2l6ZSxlKX0sNTAwKX1jcmVhdGVFbGVtZW50TlMoZSx0LG4scyl7dmFyIGk9ZT90aGlzLmh0bWxEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZSx0KTp0aGlzLmh0bWxEb2N1bWVudC5jcmVhdGVFbGVtZW50KHQpO3JldHVybiBPYmplY3QuYXNzaWduKGksbikscyYmaWkoaSxzKSxpfWNyZWF0ZUVsZW1lbnQoZSx0LG4pe3JldHVybiB0aGlzLmNyZWF0ZUVsZW1lbnROUyh2b2lkIDAsZSx0LG4pfWNyZWF0ZVN2Z0VsZW1lbnQoZSx0LG4pe3JldHVybiB0aGlzLmNyZWF0ZUVsZW1lbnROUyhtZS5zdmcsZSx0LG4pfWNyZWF0ZVN0eWxlRWxlbWVudChlKXtyZXR1cm4gdGhpcy5jcmVhdGVFbGVtZW50KCJzdHlsZSIse2lubmVySFRNTDplfSl9Y3JlYXRlQ29tbWVudChlKXtyZXR1cm4gdGhpcy5odG1sRG9jdW1lbnQuY3JlYXRlQ29tbWVudChlKX1sYXRlcihlKXt0aGlzLnBvc3RSZW5kZXJUYXNrcy5wdXNoKGUpfX1mdW5jdGlvbiBmbyhyKXtyLmlubmVySFRNTD0iIn1mdW5jdGlvbiBpaShyLGUpe2UuZm9yRWFjaCh0PT5yLmFwcGVuZENoaWxkKEhoKHQpP2RvY3VtZW50LmNyZWF0ZVRleHROb2RlKHQpOnQpKX1mdW5jdGlvbiByZChyLGUpe2Zvcih2YXIgdD1yLnBhcmVudDt0IT1udWxsJiZ0LnR5cGUhPWU7KXQ9dC5wYXJlbnQ7cmV0dXJuIHR9Y29uc3QgcG89e2lnbm9yZUhlaWdodDohMSxpZ25vcmVXaWR0aDohMSxpZ25vcmVGb250czohMSxicmVha1BhZ2VzOiEwLGRlYnVnOiExLGV4cGVyaW1lbnRhbDohMSxjbGFzc05hbWU6ImRvY3giLGluV3JhcHBlcjohMCxoaWRlV3JhcHBlck9uUHJpbnQ6ITEsdHJpbVhtbERlY2xhcmF0aW9uOiEwLGlnbm9yZUxhc3RSZW5kZXJlZFBhZ2VCcmVhazohMCxyZW5kZXJIZWFkZXJzOiEwLHJlbmRlckZvb3RlcnM6ITAscmVuZGVyRm9vdG5vdGVzOiEwLHJlbmRlckVuZG5vdGVzOiEwLHVzZUJhc2U2NFVSTDohMSxyZW5kZXJDaGFuZ2VzOiExLHJlbmRlckNvbW1lbnRzOiExLHJlbmRlckFsdENodW5rczohMH07ZnVuY3Rpb24gbmQocixlKXtjb25zdCB0PXsuLi5wbywuLi5lfTtyZXR1cm4gc2kubG9hZChyLG5ldyBxQSh0KSx0KX1hc3luYyBmdW5jdGlvbiBzZChyLGUsdCxuKXtjb25zdCBzPXsuLi5wbywuLi5ufTtyZXR1cm4gYXdhaXQgbmV3IHRkKHdpbmRvdy5kb2N1bWVudCkucmVuZGVyKHIsZSx0LHMpfWFzeW5jIGZ1bmN0aW9uIGlkKHIsZSx0LG4pe2NvbnN0IHM9YXdhaXQgbmQocixuKTtyZXR1cm4gYXdhaXQgc2QocyxlLHQsbiksc312YXIgUmU9e307ZnVuY3Rpb24gYWQocixlLHQpe2lmKHQ9PT12b2lkIDAmJih0PUFycmF5LnByb3RvdHlwZSksciYmdHlwZW9mIHQuZmluZD09ImZ1bmN0aW9uIilyZXR1cm4gdC5maW5kLmNhbGwocixlKTtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKylpZihocihyLG4pKXt2YXIgcz1yW25dO2lmKGUuY2FsbCh2b2lkIDAscyxuLHIpKXJldHVybiBzfX1mdW5jdGlvbiBrcihyLGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT1PYmplY3QpLGUmJnR5cGVvZiBlLmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM9PSJmdW5jdGlvbiImJihyPWUuY3JlYXRlKG51bGwsZS5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHIpKSksZSYmdHlwZW9mIGUuZnJlZXplPT0iZnVuY3Rpb24iP2UuZnJlZXplKHIpOnJ9ZnVuY3Rpb24gaHIocixlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsZSl9ZnVuY3Rpb24gb2QocixlKXtpZihyPT09bnVsbHx8dHlwZW9mIHIhPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBpcyBub3QgYW4gb2JqZWN0Iik7Zm9yKHZhciB0IGluIGUpaHIoZSx0KSYmKHJbdF09ZVt0XSk7cmV0dXJuIHJ9dmFyIGdvPWtyKHthbGxvd2Z1bGxzY3JlZW46ITAsYXN5bmM6ITAsYXV0b2ZvY3VzOiEwLGF1dG9wbGF5OiEwLGNoZWNrZWQ6ITAsY29udHJvbHM6ITAsZGVmYXVsdDohMCxkZWZlcjohMCxkaXNhYmxlZDohMCxmb3Jtbm92YWxpZGF0ZTohMCxoaWRkZW46ITAsaXNtYXA6ITAsaXRlbXNjb3BlOiEwLGxvb3A6ITAsbXVsdGlwbGU6ITAsbXV0ZWQ6ITAsbm9tb2R1bGU6ITAsbm92YWxpZGF0ZTohMCxvcGVuOiEwLHBsYXlzaW5saW5lOiEwLHJlYWRvbmx5OiEwLHJlcXVpcmVkOiEwLHJldmVyc2VkOiEwLHNlbGVjdGVkOiEwfSk7ZnVuY3Rpb24gdWQocil7cmV0dXJuIGhyKGdvLHIudG9Mb3dlckNhc2UoKSl9dmFyIG1vPWtyKHthcmVhOiEwLGJhc2U6ITAsYnI6ITAsY29sOiEwLGVtYmVkOiEwLGhyOiEwLGltZzohMCxpbnB1dDohMCxsaW5rOiEwLG1ldGE6ITAscGFyYW06ITAsc291cmNlOiEwLHRyYWNrOiEwLHdicjohMH0pO2Z1bmN0aW9uIGxkKHIpe3JldHVybiBocihtbyxyLnRvTG93ZXJDYXNlKCkpfXZhciBvbj1rcih7c2NyaXB0OiExLHN0eWxlOiExLHRleHRhcmVhOiEwLHRpdGxlOiEwfSk7ZnVuY3Rpb24gY2Qocil7dmFyIGU9ci50b0xvd2VyQ2FzZSgpO3JldHVybiBocihvbixlKSYmIW9uW2VdfWZ1bmN0aW9uIGhkKHIpe3ZhciBlPXIudG9Mb3dlckNhc2UoKTtyZXR1cm4gaHIob24sZSkmJm9uW2VdfWZ1bmN0aW9uIGJvKHIpe3JldHVybiByPT09dW4uSFRNTH1mdW5jdGlvbiBBZChyKXtyZXR1cm4gYm8ocil8fHI9PT11bi5YTUxfWEhUTUxfQVBQTElDQVRJT059dmFyIHVuPWtyKHtIVE1MOiJ0ZXh0L2h0bWwiLFhNTF9BUFBMSUNBVElPTjoiYXBwbGljYXRpb24veG1sIixYTUxfVEVYVDoidGV4dC94bWwiLFhNTF9YSFRNTF9BUFBMSUNBVElPTjoiYXBwbGljYXRpb24veGh0bWwreG1sIixYTUxfU1ZHX0lNQUdFOiJpbWFnZS9zdmcreG1sIn0pLGRkPU9iamVjdC5rZXlzKHVuKS5tYXAoZnVuY3Rpb24ocil7cmV0dXJuIHVuW3JdfSk7ZnVuY3Rpb24gZmQocil7cmV0dXJuIGRkLmluZGV4T2Yocik+LTF9dmFyIHBkPWtyKHtIVE1MOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixTVkc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixYTUw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsWE1MTlM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn0pO1JlLmFzc2lnbj1vZCxSZS5maW5kPWFkLFJlLmZyZWV6ZT1rcixSZS5IVE1MX0JPT0xFQU5fQVRUUklCVVRFUz1nbyxSZS5IVE1MX1JBV19URVhUX0VMRU1FTlRTPW9uLFJlLkhUTUxfVk9JRF9FTEVNRU5UUz1tbyxSZS5oYXNEZWZhdWx0SFRNTE5hbWVzcGFjZT1BZCxSZS5oYXNPd249aHIsUmUuaXNIVE1MQm9vbGVhbkF0dHJpYnV0ZT11ZCxSZS5pc0hUTUxSYXdUZXh0RWxlbWVudD1jZCxSZS5pc0hUTUxFc2NhcGFibGVSYXdUZXh0RWxlbWVudD1oZCxSZS5pc0hUTUxNaW1lVHlwZT1ibyxSZS5pc0hUTUxWb2lkRWxlbWVudD1sZCxSZS5pc1ZhbGlkTWltZVR5cGU9ZmQsUmUuTUlNRV9UWVBFPXVuLFJlLk5BTUVTUEFDRT1wZDt2YXIgQXI9e30sZ2Q9UmU7ZnVuY3Rpb24gQ28ocixlKXtyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnJ9LG5hbWU6e3ZhbHVlOnIubmFtZSxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOmV9fSl9dmFyIGxuPWdkLmZyZWV6ZSh7RXJyb3I6IkVycm9yIixJbmRleFNpemVFcnJvcjoiSW5kZXhTaXplRXJyb3IiLERvbXN0cmluZ1NpemVFcnJvcjoiRG9tc3RyaW5nU2l6ZUVycm9yIixIaWVyYXJjaHlSZXF1ZXN0RXJyb3I6IkhpZXJhcmNoeVJlcXVlc3RFcnJvciIsV3JvbmdEb2N1bWVudEVycm9yOiJXcm9uZ0RvY3VtZW50RXJyb3IiLEludmFsaWRDaGFyYWN0ZXJFcnJvcjoiSW52YWxpZENoYXJhY3RlckVycm9yIixOb0RhdGFBbGxvd2VkRXJyb3I6Ik5vRGF0YUFsbG93ZWRFcnJvciIsTm9Nb2RpZmljYXRpb25BbGxvd2VkRXJyb3I6Ik5vTW9kaWZpY2F0aW9uQWxsb3dlZEVycm9yIixOb3RGb3VuZEVycm9yOiJOb3RGb3VuZEVycm9yIixOb3RTdXBwb3J0ZWRFcnJvcjoiTm90U3VwcG9ydGVkRXJyb3IiLEluVXNlQXR0cmlidXRlRXJyb3I6IkluVXNlQXR0cmlidXRlRXJyb3IiLEludmFsaWRTdGF0ZUVycm9yOiJJbnZhbGlkU3RhdGVFcnJvciIsU3ludGF4RXJyb3I6IlN5bnRheEVycm9yIixJbnZhbGlkTW9kaWZpY2F0aW9uRXJyb3I6IkludmFsaWRNb2RpZmljYXRpb25FcnJvciIsTmFtZXNwYWNlRXJyb3I6Ik5hbWVzcGFjZUVycm9yIixJbnZhbGlkQWNjZXNzRXJyb3I6IkludmFsaWRBY2Nlc3NFcnJvciIsVmFsaWRhdGlvbkVycm9yOiJWYWxpZGF0aW9uRXJyb3IiLFR5cGVNaXNtYXRjaEVycm9yOiJUeXBlTWlzbWF0Y2hFcnJvciIsU2VjdXJpdHlFcnJvcjoiU2VjdXJpdHlFcnJvciIsTmV0d29ya0Vycm9yOiJOZXR3b3JrRXJyb3IiLEFib3J0RXJyb3I6IkFib3J0RXJyb3IiLFVSTE1pc21hdGNoRXJyb3I6IlVSTE1pc21hdGNoRXJyb3IiLFF1b3RhRXhjZWVkZWRFcnJvcjoiUXVvdGFFeGNlZWRlZEVycm9yIixUaW1lb3V0RXJyb3I6IlRpbWVvdXRFcnJvciIsSW52YWxpZE5vZGVUeXBlRXJyb3I6IkludmFsaWROb2RlVHlwZUVycm9yIixEYXRhQ2xvbmVFcnJvcjoiRGF0YUNsb25lRXJyb3IiLEVuY29kaW5nRXJyb3I6IkVuY29kaW5nRXJyb3IiLE5vdFJlYWRhYmxlRXJyb3I6Ik5vdFJlYWRhYmxlRXJyb3IiLFVua25vd25FcnJvcjoiVW5rbm93bkVycm9yIixDb25zdHJhaW50RXJyb3I6IkNvbnN0cmFpbnRFcnJvciIsRGF0YUVycm9yOiJEYXRhRXJyb3IiLFRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjoiVHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yIixSZWFkT25seUVycm9yOiJSZWFkT25seUVycm9yIixWZXJzaW9uRXJyb3I6IlZlcnNpb25FcnJvciIsT3BlcmF0aW9uRXJyb3I6Ik9wZXJhdGlvbkVycm9yIixOb3RBbGxvd2VkRXJyb3I6Ik5vdEFsbG93ZWRFcnJvciIsT3B0T3V0RXJyb3I6Ik9wdE91dEVycm9yIn0pLFNvPU9iamVjdC5rZXlzKGxuKTtmdW5jdGlvbiBFbyhyKXtyZXR1cm4gdHlwZW9mIHI9PSJudW1iZXIiJiZyPj0xJiZyPD0yNX1mdW5jdGlvbiBtZChyKXtyZXR1cm4gdHlwZW9mIHI9PSJzdHJpbmciJiZyLnN1YnN0cmluZyhyLmxlbmd0aC1sbi5FcnJvci5sZW5ndGgpPT09bG4uRXJyb3J9ZnVuY3Rpb24gY24ocixlKXtFbyhyKT8odGhpcy5uYW1lPVNvW3JdLHRoaXMubWVzc2FnZT1lfHwiIik6KHRoaXMubWVzc2FnZT1yLHRoaXMubmFtZT1tZChlKT9lOmxuLkVycm9yKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSYmRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyxjbil9Q28oY24sITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNuLnByb3RvdHlwZSx7Y29kZTp7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgcj1Tby5pbmRleE9mKHRoaXMubmFtZSk7cmV0dXJuIEVvKHIpP3I6MH19fSk7Zm9yKHZhciB5bz17SU5ERVhfU0laRV9FUlI6MSxET01TVFJJTkdfU0laRV9FUlI6MixISUVSQVJDSFlfUkVRVUVTVF9FUlI6MyxXUk9OR19ET0NVTUVOVF9FUlI6NCxJTlZBTElEX0NIQVJBQ1RFUl9FUlI6NSxOT19EQVRBX0FMTE9XRURfRVJSOjYsTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOjcsTk9UX0ZPVU5EX0VSUjo4LE5PVF9TVVBQT1JURURfRVJSOjksSU5VU0VfQVRUUklCVVRFX0VSUjoxMCxJTlZBTElEX1NUQVRFX0VSUjoxMSxTWU5UQVhfRVJSOjEyLElOVkFMSURfTU9ESUZJQ0FUSU9OX0VSUjoxMyxOQU1FU1BBQ0VfRVJSOjE0LElOVkFMSURfQUNDRVNTX0VSUjoxNSxWQUxJREFUSU9OX0VSUjoxNixUWVBFX01JU01BVENIX0VSUjoxNyxTRUNVUklUWV9FUlI6MTgsTkVUV09SS19FUlI6MTksQUJPUlRfRVJSOjIwLFVSTF9NSVNNQVRDSF9FUlI6MjEsUVVPVEFfRVhDRUVERURfRVJSOjIyLFRJTUVPVVRfRVJSOjIzLElOVkFMSURfTk9ERV9UWVBFX0VSUjoyNCxEQVRBX0NMT05FX0VSUjoyNX0sYWk9T2JqZWN0LmVudHJpZXMoeW8pLHpuPTA7em48YWkubGVuZ3RoO3puKyspe3ZhciBiZD1haVt6bl1bMF07Y25bYmRdPWFpW3puXVsxXX1mdW5jdGlvbiBvaShyLGUpe3RoaXMubWVzc2FnZT1yLHRoaXMubG9jYXRvcj1lLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLG9pKX1DbyhvaSksQXIuRE9NRXhjZXB0aW9uPWNuLEFyLkRPTUV4Y2VwdGlvbk5hbWU9bG4sQXIuRXhjZXB0aW9uQ29kZT15byxBci5QYXJzZUVycm9yPW9pO3ZhciBUZT17fSxkZT17fTtmdW5jdGlvbiB2byhyKXt0cnl7dHlwZW9mIHIhPSJmdW5jdGlvbiImJihyPVJlZ0V4cCk7dmFyIGU9bmV3IHIoIvCdjIYiLCJ1IikuZXhlYygi8J2MhiIpO3JldHVybiEhZSYmZVswXS5sZW5ndGg9PT0yfWNhdGNoe31yZXR1cm4hMX12YXIgeHI9dm8oKTtmdW5jdGlvbiBYdChyKXtpZihyLnNvdXJjZVswXSE9PSJbIil0aHJvdyBuZXcgRXJyb3IocisiIGNhbiBub3QgYmUgdXNlZCB3aXRoIGNoYXJzIik7cmV0dXJuIHIuc291cmNlLnNsaWNlKDEsci5zb3VyY2UubGFzdEluZGV4T2YoIl0iKSl9ZnVuY3Rpb24gVHIocixlKXtpZihyLnNvdXJjZVswXSE9PSJbIil0aHJvdyBuZXcgRXJyb3IoIi8iK3Iuc291cmNlKyIvIGNhbiBub3QgYmUgdXNlZCB3aXRoIGNoYXJzX3dpdGhvdXQiKTtpZighZXx8dHlwZW9mIGUhPSJzdHJpbmciKXRocm93IG5ldyBFcnJvcihKU09OLnN0cmluZ2lmeShlKSsiIGlzIG5vdCBhIHZhbGlkIHNlYXJjaCIpO2lmKHIuc291cmNlLmluZGV4T2YoZSk9PT0tMSl0aHJvdyBuZXcgRXJyb3IoJyInK2UrJyIgaXMgbm90IGlzIC8nK3Iuc291cmNlKyIvIik7aWYoZT09PSItIiYmci5zb3VyY2UuaW5kZXhPZihlKSE9PTEpdGhyb3cgbmV3IEVycm9yKCciJytlKyciIGlzIG5vdCBhdCB0aGUgZmlyc3QgcG9zdGlvbiBvZiAvJytyLnNvdXJjZSsiLyIpO3JldHVybiBuZXcgUmVnRXhwKHIuc291cmNlLnJlcGxhY2UoZSwiIikseHI/InUiOiIiKX1mdW5jdGlvbiBwZShyKXt2YXIgZT10aGlzO3JldHVybiBuZXcgUmVnRXhwKEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykubWFwKGZ1bmN0aW9uKHQpe3ZhciBuPXR5cGVvZiB0PT0ic3RyaW5nIjtpZihuJiZlPT09dm9pZCAwJiZ0PT09InwiKXRocm93IG5ldyBFcnJvcigidXNlIHJlZ2cgaW5zdGVhZCBvZiByZWcgdG8gd3JhcCBleHByZXNzaW9ucyB3aXRoIGB8YCEiKTtyZXR1cm4gbj90OnQuc291cmNlfSkuam9pbigiIikseHI/Im11IjoibSIpfWZ1bmN0aW9uIGxlKHIpe2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0wKXRocm93IG5ldyBFcnJvcigibm8gcGFyYW1ldGVycyBwcm92aWRlZCIpO3JldHVybiBwZS5hcHBseShsZSxbIig/OiJdLmNvbmNhdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpLFsiKSJdKSl9dmFyIENkPSLvv70iLCR0PS9bLVx4MDlceDBBXHgwRFx4MjAtXHgyQ1x4MkUtXHVEN0ZGXHVFMDAwLVx1RkZGRF0vO3hyJiYoJHQ9cGUoIlsiLFh0KCR0KSwiXFx1ezEwMDAwfS1cXHV7MTBGRkZGfSIsIl0iKSk7dmFyIFNkPW5ldyBSZWdFeHAoIlteIitYdCgkdCkrIl0iLHhyPyJ1IjoiIiksdWk9L1tceDIwXHgwOVx4MERceDBBXS8sRWQ9WHQodWkpLERlPXBlKHVpLCIrIiksQmU9cGUodWksIioiKSxobj0vWzpfYS16QS1aXHhDMC1ceEQ2XHhEOC1ceEY2XHhGOC1cdTAyRkZcdTAzNzAtXHUxRkZGXHUyMDBDLVx1MjAwRFx1MjA3MC1cdTIxOEZcdTJDMDAtXHUyRkVGXHUzMDAxLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRkZEXS87eHImJihobj1wZSgiWyIsWHQoaG4pLCJcXHV7MTAwMDB9LVxcdXsxMEZGRkZ9IiwiXSIpKTt2YXIgeWQ9WHQoaG4pLGxpPXBlKCJbIix5ZCxYdCgvWy0uMC05XHhCN10vKSxYdCgvW1x1MDMwMC1cdTAzNkZcdTIwM0YtXHUyMDQwXS8pLCJdIikscHQ9cGUoaG4sbGksIioiKSx3bz1wZShsaSwiKyIpLHZkPXBlKCImIixwdCwiOyIpLHdkPWxlKC8mI1swLTldKzt8JiN4WzAtOWEtZkEtRl0rOy8pLEFuPWxlKHZkLCJ8Iix3ZCksZG49cGUoIiUiLHB0LCI7IiksY2k9bGUocGUoJyInLGxlKC9bXiUmIl0vLCJ8IixkbiwifCIsQW4pLCIqIiwnIicpLCJ8IixwZSgiJyIsbGUoL1teJSYnXS8sInwiLGRuLCJ8IixBbiksIioiLCInIikpLERkPWxlKCciJyxsZSgvW148JiJdLywifCIsQW4pLCIqIiwnIicsInwiLCInIixsZSgvW148JiddLywifCIsQW4pLCIqIiwiJyIpLElkPVRyKGhuLCI6IiksTmQ9VHIobGksIjoiKSxEbz1wZShJZCxOZCwiKiIpLGZuPXBlKERvLGxlKCI6IixEbyksIj8iKSxrZD1wZSgiXiIsZm4sIiQiKSx4ZD1wZSgiKCIsZm4sIikiKSxCcj1sZSgvIlteIl0qInwnW14nXSonLyksVGQ9cGUoL148XD8vLCIoIixwdCwiKSIsbGUoRGUsIigiLCR0LCIqPykiKSwiPyIsL1w/Pi8pLElvPS9bXHgyMFx4MERceDBBYS16QS1aMC05LScoKSssLi86PT87ISojQCRfJV0vLHBuPWxlKCciJyxJbywnKiInLCJ8IiwiJyIsVHIoSW8sIiciKSwiKiciKSxObz0iPCEtLSIsa289Ii0tPiIsQmQ9cGUoTm8sbGUoVHIoJHQsIi0iKSwifCIscGUoIi0iLFRyKCR0LCItIikpKSwiKiIsa28pLHhvPSIjUENEQVRBIixfZD1sZShwZSgvXCgvLEJlLHhvLGxlKEJlLC9cfC8sQmUsZm4pLCIqIixCZSwvXClcKi8pLCJ8IixwZSgvXCgvLEJlLHhvLEJlLC9cKS8pKSxSZD0vWz8qK10/LyxGZD1wZSgvXChbXj5dK1wpLyxSZCksTWQ9bGUoIkVNUFRZIiwifCIsIkFOWSIsInwiLF9kLCJ8IixGZCksT2Q9IjwhRUxFTUVOVCIsTGQ9cGUoT2QsRGUsbGUoZm4sInwiLGRuKSxEZSxsZShNZCwifCIsZG4pLEJlLCI+IiksUGQ9cGUoIk5PVEFUSU9OIixEZSwvXCgvLEJlLHB0LGxlKEJlLC9cfC8sQmUscHQpLCIqIixCZSwvXCkvKSxVZD1wZSgvXCgvLEJlLHdvLGxlKEJlLC9cfC8sQmUsd28pLCIqIixCZSwvXCkvKSxHZD1sZShQZCwifCIsVWQpLEhkPWxlKC9DREFUQXxJRHxJRFJFRnxJRFJFRlN8RU5USVRZfEVOVElUSUVTfE5NVE9LRU58Tk1UT0tFTlMvLCJ8IixHZCksUWQ9bGUoLyNSRVFVSVJFRHwjSU1QTElFRC8sInwiLGxlKGxlKCIjRklYRUQiLERlKSwiPyIsRGQpKSxXZD1sZShEZSxwdCxEZSxIZCxEZSxRZCksS2Q9IjwhQVRUTElTVCIsWWQ9cGUoS2QsRGUscHQsV2QsIioiLEJlLCI+IiksaGk9ImFib3V0OmxlZ2FjeS1jb21wYXQiLFpkPWxlKCciJytoaSsnIicsInwiLCInIitoaSsiJyIpLEFpPSJTWVNURU0iLEpuPSJQVUJMSUMiLHFuPWxlKGxlKEFpLERlLEJyKSwifCIsbGUoSm4sRGUscG4sRGUsQnIpKSxWZD1wZSgiXiIsbGUobGUoQWksRGUsIig/PFN5c3RlbUxpdGVyYWxPbmx5PiIsQnIsIikiKSwifCIsbGUoSm4sRGUsIig/PFB1YmlkTGl0ZXJhbD4iLHBuLCIpIixEZSwiKD88U3lzdGVtTGl0ZXJhbD4iLEJyLCIpIikpKSx6ZD1wZSgiXiIscG4sIiQiKSxKZD1wZSgiXiIsQnIsIiQiKSxxZD1sZShEZSwiTkRBVEEiLERlLHB0KSxqZD1sZShjaSwifCIsbGUocW4scWQsIj8iKSksVG89IjwhRU5USVRZIixYZD1wZShUbyxEZSxwdCxEZSxqZCxCZSwiPiIpLCRkPWxlKGNpLCJ8IixxbiksZWY9cGUoVG8sRGUsIiUiLERlLHB0LERlLCRkLEJlLCI+IiksdGY9bGUoWGQsInwiLGVmKSxyZj1wZShKbixEZSxwbiksbmY9cGUoIjwhTk9UQVRJT04iLERlLHB0LERlLGxlKHFuLCJ8IixyZiksQmUsIj4iKSxkaT1wZShCZSwiPSIsQmUpLEJvPS8xWy5dXGQrLyxzZj1wZShEZSwidmVyc2lvbiIsZGksbGUoIiciLEJvLCInIiwifCIsJyInLEJvLCciJykpLF9vPS9bQS1aYS16XVstQS1aYS16MC05Ll9dKi8sYWY9bGUoRGUsImVuY29kaW5nIixkaSxsZSgnIicsX28sJyInLCJ8IiwiJyIsX28sIiciKSksb2Y9bGUoRGUsInN0YW5kYWxvbmUiLGRpLGxlKCInIixsZSgieWVzIiwifCIsIm5vIiksIiciLCJ8IiwnIicsbGUoInllcyIsInwiLCJubyIpLCciJykpLHVmPXBlKC9ePFw/eG1sLyxzZixhZiwiPyIsb2YsIj8iLEJlLC9cPz4vKSxsZj0iPCFET0NUWVBFIixjZj0iPCFbQ0RBVEFbIixoZj0iXV0+IixBZj0vPCFcW0NEQVRBXFsvLGRmPS9cXVxdPi8sZmY9cGUoJHQsIio/IixkZikscGY9cGUoQWYsZmYpO2RlLmNoYXJzPVh0LGRlLmNoYXJzX3dpdGhvdXQ9VHIsZGUuZGV0ZWN0VW5pY29kZVN1cHBvcnQ9dm8sZGUucmVnPXBlLGRlLnJlZ2c9bGUsZGUuQUJPVVRfTEVHQUNZX0NPTVBBVD1oaSxkZS5BQk9VVF9MRUdBQ1lfQ09NUEFUX1N5c3RlbUxpdGVyYWw9WmQsZGUuQXR0bGlzdERlY2w9WWQsZGUuQ0RBVEFfU1RBUlQ9Y2YsZGUuQ0RBVEFfRU5EPWhmLGRlLkNEU2VjdD1wZixkZS5DaGFyPSR0LGRlLkNvbW1lbnQ9QmQsZGUuQ09NTUVOVF9TVEFSVD1ObyxkZS5DT01NRU5UX0VORD1rbyxkZS5ET0NUWVBFX0RFQ0xfU1RBUlQ9bGYsZGUuZWxlbWVudGRlY2w9TGQsZGUuRW50aXR5RGVjbD10ZixkZS5FbnRpdHlWYWx1ZT1jaSxkZS5FeHRlcm5hbElEPXFuLGRlLkV4dGVybmFsSURfbWF0Y2g9VmQsZGUuTmFtZT1wdCxkZS5Ob3RhdGlvbkRlY2w9bmYsZGUuUmVmZXJlbmNlPUFuLGRlLlBFUmVmZXJlbmNlPWRuLGRlLlBJPVRkLGRlLlBVQkxJQz1KbixkZS5QdWJpZExpdGVyYWw9cG4sZGUuUHViaWRMaXRlcmFsX21hdGNoPXpkLGRlLlFOYW1lPWZuLGRlLlFOYW1lX2V4YWN0PWtkLGRlLlFOYW1lX2dyb3VwPXhkLGRlLlM9RGUsZGUuU0NoYXJfcz1FZCxkZS5TX09QVD1CZSxkZS5TWVNURU09QWksZGUuU3lzdGVtTGl0ZXJhbD1CcixkZS5TeXN0ZW1MaXRlcmFsX21hdGNoPUpkLGRlLkludmFsaWRDaGFyPVNkLGRlLlVOSUNPREVfUkVQTEFDRU1FTlRfQ0hBUkFDVEVSPUNkLGRlLlVOSUNPREVfU1VQUE9SVD14cixkZS5YTUxEZWNsPXVmO3ZhciBndD1SZSx4dD1ndC5maW5kLGdmPWd0Lmhhc0RlZmF1bHRIVE1MTmFtZXNwYWNlLF9yPWd0Lmhhc093bixtZj1ndC5pc0hUTUxNaW1lVHlwZSxiZj1ndC5pc0hUTUxSYXdUZXh0RWxlbWVudCxDZj1ndC5pc0hUTUxWb2lkRWxlbWVudCxnbj1ndC5NSU1FX1RZUEUsVHQ9Z3QuTkFNRVNQQUNFLGV0PVN5bWJvbCgpLFJvPUFyLG5lPVJvLkRPTUV4Y2VwdGlvbixtdD1Sby5ET01FeGNlcHRpb25OYW1lLHplPWRlO2Z1bmN0aW9uIG50KHIpe2lmKHIhPT1ldCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbGxlZ2FsIGNvbnN0cnVjdG9yIil9ZnVuY3Rpb24gU2Yocil7cmV0dXJuIHIhPT0iIn1mdW5jdGlvbiBFZihyKXtyZXR1cm4gcj9yLnNwbGl0KC9bXHRcblxmXHIgXSsvKS5maWx0ZXIoU2YpOltdfWZ1bmN0aW9uIHlmKHIsZSl7cmV0dXJuIF9yKHIsZSl8fChyW2VdPSEwKSxyfWZ1bmN0aW9uIEZvKHIpe2lmKCFyKXJldHVybltdO3ZhciBlPUVmKHIpO3JldHVybiBPYmplY3Qua2V5cyhlLnJlZHVjZSh5Zix7fSkpfWZ1bmN0aW9uIHZmKHIpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gciYmci5pbmRleE9mKGUpIT09LTF9fWZ1bmN0aW9uIE1vKHIpe2lmKCF6ZS5RTmFtZV9leGFjdC50ZXN0KHIpKXRocm93IG5ldyBuZShuZS5JTlZBTElEX0NIQVJBQ1RFUl9FUlIsJ2ludmFsaWQgY2hhcmFjdGVyIGluIHF1YWxpZmllZCBuYW1lICInK3IrJyInKX1mdW5jdGlvbiBmaShyLGUpe01vKGUpLHI9cnx8bnVsbDt2YXIgdD1udWxsLG49ZTtpZihlLmluZGV4T2YoIjoiKT49MCl7dmFyIHM9ZS5zcGxpdCgiOiIpO3Q9c1swXSxuPXNbMV19aWYodCE9PW51bGwmJnI9PT1udWxsKXRocm93IG5ldyBuZShuZS5OQU1FU1BBQ0VfRVJSLCJwcmVmaXggaXMgbm9uLW51bGwgYW5kIG5hbWVzcGFjZSBpcyBudWxsIik7aWYodD09PSJ4bWwiJiZyIT09Z3QuTkFNRVNQQUNFLlhNTCl0aHJvdyBuZXcgbmUobmUuTkFNRVNQQUNFX0VSUiwncHJlZml4IGlzICJ4bWwiIGFuZCBuYW1lc3BhY2UgaXMgbm90IHRoZSBYTUwgbmFtZXNwYWNlJyk7aWYoKHQ9PT0ieG1sbnMifHxlPT09InhtbG5zIikmJnIhPT1ndC5OQU1FU1BBQ0UuWE1MTlMpdGhyb3cgbmV3IG5lKG5lLk5BTUVTUEFDRV9FUlIsJ2VpdGhlciBxdWFsaWZpZWROYW1lIG9yIHByZWZpeCBpcyAieG1sbnMiIGFuZCBuYW1lc3BhY2UgaXMgbm90IHRoZSBYTUxOUyBuYW1lc3BhY2UnKTtpZihyPT09Z3QuTkFNRVNQQUNFLlhNTE5TJiZ0IT09InhtbG5zIiYmZSE9PSJ4bWxucyIpdGhyb3cgbmV3IG5lKG5lLk5BTUVTUEFDRV9FUlIsJ25hbWVzcGFjZSBpcyB0aGUgWE1MTlMgbmFtZXNwYWNlIGFuZCBuZWl0aGVyIHF1YWxpZmllZE5hbWUgbm9yIHByZWZpeCBpcyAieG1sbnMiJyk7cmV0dXJuW3IsdCxuXX1mdW5jdGlvbiBScihyLGUpe2Zvcih2YXIgdCBpbiByKV9yKHIsdCkmJihlW3RdPXJbdF0pfWZ1bmN0aW9uIHN0KHIsZSl7dmFyIHQ9ci5wcm90b3R5cGU7aWYoISh0IGluc3RhbmNlb2YgZSkpe2xldCBuPWZ1bmN0aW9uKCl7fTtuLnByb3RvdHlwZT1lLnByb3RvdHlwZSxuPW5ldyBuLFJyKHQsbiksci5wcm90b3R5cGU9dD1ufXQuY29uc3RydWN0b3IhPXImJih0eXBlb2YgciE9ImZ1bmN0aW9uIiYmY29uc29sZS5lcnJvcigidW5rbm93biBDbGFzczoiK3IpLHQuY29uc3RydWN0b3I9cil9dmFyIGl0PXt9LGJ0PWl0LkVMRU1FTlRfTk9ERT0xLEZyPWl0LkFUVFJJQlVURV9OT0RFPTIsam49aXQuVEVYVF9OT0RFPTMsT289aXQuQ0RBVEFfU0VDVElPTl9OT0RFPTQsTG89aXQuRU5USVRZX1JFRkVSRU5DRV9OT0RFPTUsd2Y9aXQuRU5USVRZX05PREU9NixwaT1pdC5QUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREU9NyxnaT1pdC5DT01NRU5UX05PREU9OCxNcj1pdC5ET0NVTUVOVF9OT0RFPTksUG89aXQuRE9DVU1FTlRfVFlQRV9OT0RFPTEwLGVyPWl0LkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU9MTEsRGY9aXQuTk9UQVRJT05fTk9ERT0xMixGZT1ndC5mcmVlemUoe0RPQ1VNRU5UX1BPU0lUSU9OX0RJU0NPTk5FQ1RFRDoxLERPQ1VNRU5UX1BPU0lUSU9OX1BSRUNFRElORzoyLERPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lORzo0LERPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5TOjgsRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZOjE2LERPQ1VNRU5UX1BPU0lUSU9OX0lNUExFTUVOVEFUSU9OX1NQRUNJRklDOjMyfSk7ZnVuY3Rpb24gVW8ocixlKXtpZihlLmxlbmd0aDxyLmxlbmd0aClyZXR1cm4gVW8oZSxyKTt2YXIgdD1udWxsO2Zvcih2YXIgbiBpbiByKXtpZihyW25dIT09ZVtuXSlyZXR1cm4gdDt0PXJbbl19cmV0dXJuIHR9ZnVuY3Rpb24gR28ocil7cmV0dXJuIHIuZ3VpZHx8KHIuZ3VpZD1NYXRoLnJhbmRvbSgpKSxyLmd1aWR9ZnVuY3Rpb24gUWUoKXt9UWUucHJvdG90eXBlPXtsZW5ndGg6MCxpdGVtOmZ1bmN0aW9uKHIpe3JldHVybiByPj0wJiZyPHRoaXMubGVuZ3RoP3RoaXNbcl06bnVsbH0sdG9TdHJpbmc6ZnVuY3Rpb24ocil7dmFyIGU7dHlwZW9mIHI9PSJmdW5jdGlvbiI/ZT17cmVxdWlyZVdlbGxGb3JtZWQ6ITEsc3BsaXRDREFUQVNlY3Rpb25zOiEwLG5vZGVGaWx0ZXI6cn06cj9lPXtyZXF1aXJlV2VsbEZvcm1lZDohIXIucmVxdWlyZVdlbGxGb3JtZWQsc3BsaXRDREFUQVNlY3Rpb25zOnIuc3BsaXRDREFUQVNlY3Rpb25zIT09ITEsbm9kZUZpbHRlcjpyLm5vZGVGaWx0ZXJ8fG51bGx9OmU9e3JlcXVpcmVXZWxsRm9ybWVkOiExLHNwbGl0Q0RBVEFTZWN0aW9uczohMCxub2RlRmlsdGVyOm51bGx9O2Zvcih2YXIgdD1bXSxuPTA7bjx0aGlzLmxlbmd0aDtuKyspQ2kodGhpc1tuXSx0LG51bGwsZSk7cmV0dXJuIHQuam9pbigiIil9LGZpbHRlcjpmdW5jdGlvbihyKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmZpbHRlci5jYWxsKHRoaXMscil9LGluZGV4T2Y6ZnVuY3Rpb24ocil7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwodGhpcyxyKX19LFFlLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxlPTA7cmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gZTxyLmxlbmd0aD97dmFsdWU6cltlKytdLGRvbmU6ITF9Ontkb25lOiEwfX0scmV0dXJuOmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6ITB9fX19O2Z1bmN0aW9uIEJ0KHIsZSl7dGhpcy5fbm9kZT1yLHRoaXMuX3JlZnJlc2g9ZSxYbih0aGlzKX1mdW5jdGlvbiBYbihyKXt2YXIgZT1yLl9ub2RlLl9pbmN8fHIuX25vZGUub3duZXJEb2N1bWVudC5faW5jO2lmKHIuX2luYyE9PWUpe3ZhciB0PXIuX3JlZnJlc2goci5fbm9kZSk7aWYocnUociwibGVuZ3RoIix0Lmxlbmd0aCksIXIuJCRsZW5ndGh8fHQubGVuZ3RoPHIuJCRsZW5ndGgpZm9yKHZhciBuPXQubGVuZ3RoO24gaW4gcjtuKyspX3IocixuKSYmZGVsZXRlIHJbbl07UnIodCxyKSxyLl9pbmM9ZX19QnQucHJvdG90eXBlLml0ZW09ZnVuY3Rpb24ocil7cmV0dXJuIFhuKHRoaXMpLHRoaXNbcl18fG51bGx9LHN0KEJ0LFFlKTtmdW5jdGlvbiBPcigpe31mdW5jdGlvbiBIbyhyLGUpe2Zvcih2YXIgdD0wO3Q8ci5sZW5ndGg7KXtpZihyW3RdPT09ZSlyZXR1cm4gdDt0Kyt9fWZ1bmN0aW9uIElmKHIsZSx0LG4pe2lmKG4/ZVtIbyhlLG4pXT10OihlW2UubGVuZ3RoXT10LGUubGVuZ3RoKyspLHIpe3Qub3duZXJFbGVtZW50PXI7dmFyIHM9ci5vd25lckRvY3VtZW50O3MmJihuJiZZbyhzLHIsbiksTmYocyxyLHQpKX19ZnVuY3Rpb24gUW8ocixlLHQpe3ZhciBuPUhvKGUsdCk7aWYobj49MCl7Zm9yKHZhciBzPWUubGVuZ3RoLTE7bjw9czspZVtuXT1lWysrbl07aWYoZS5sZW5ndGg9cyxyKXt2YXIgaT1yLm93bmVyRG9jdW1lbnQ7aSYmWW8oaSxyLHQpLHQub3duZXJFbGVtZW50PW51bGx9fX1Pci5wcm90b3R5cGU9e2xlbmd0aDowLGl0ZW06UWUucHJvdG90eXBlLml0ZW0sZ2V0TmFtZWRJdGVtOmZ1bmN0aW9uKHIpe3RoaXMuX293bmVyRWxlbWVudCYmdGhpcy5fb3duZXJFbGVtZW50Ll9pc0luSFRNTERvY3VtZW50QW5kTmFtZXNwYWNlKCkmJihyPXIudG9Mb3dlckNhc2UoKSk7Zm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aDspe3ZhciB0PXRoaXNbZV07aWYodC5ub2RlTmFtZT09PXIpcmV0dXJuIHQ7ZSsrfXJldHVybiBudWxsfSxzZXROYW1lZEl0ZW06ZnVuY3Rpb24ocil7dmFyIGU9ci5vd25lckVsZW1lbnQ7aWYoZSYmZSE9PXRoaXMuX293bmVyRWxlbWVudCl0aHJvdyBuZXcgbmUobmUuSU5VU0VfQVRUUklCVVRFX0VSUik7dmFyIHQ9dGhpcy5nZXROYW1lZEl0ZW1OUyhyLm5hbWVzcGFjZVVSSSxyLmxvY2FsTmFtZSk7cmV0dXJuIHQ9PT1yP3I6KElmKHRoaXMuX293bmVyRWxlbWVudCx0aGlzLHIsdCksdCl9LHNldE5hbWVkSXRlbU5TOmZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLnNldE5hbWVkSXRlbShyKX0scmVtb3ZlTmFtZWRJdGVtOmZ1bmN0aW9uKHIpe3ZhciBlPXRoaXMuZ2V0TmFtZWRJdGVtKHIpO2lmKCFlKXRocm93IG5ldyBuZShuZS5OT1RfRk9VTkRfRVJSLHIpO3JldHVybiBRbyh0aGlzLl9vd25lckVsZW1lbnQsdGhpcyxlKSxlfSxyZW1vdmVOYW1lZEl0ZW1OUzpmdW5jdGlvbihyLGUpe3ZhciB0PXRoaXMuZ2V0TmFtZWRJdGVtTlMocixlKTtpZighdCl0aHJvdyBuZXcgbmUobmUuTk9UX0ZPVU5EX0VSUixyP3IrIiA6ICIrZTplKTtyZXR1cm4gUW8odGhpcy5fb3duZXJFbGVtZW50LHRoaXMsdCksdH0sZ2V0TmFtZWRJdGVtTlM6ZnVuY3Rpb24ocixlKXtyfHwocj1udWxsKTtmb3IodmFyIHQ9MDt0PHRoaXMubGVuZ3RoOyl7dmFyIG49dGhpc1t0XTtpZihuLmxvY2FsTmFtZT09PWUmJm4ubmFtZXNwYWNlVVJJPT09cilyZXR1cm4gbjt0Kyt9cmV0dXJuIG51bGx9fSxPci5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3ZhciByPXRoaXMsZT0wO3JldHVybntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIGU8ci5sZW5ndGg/e3ZhbHVlOnJbZSsrXSxkb25lOiExfTp7ZG9uZTohMH19LHJldHVybjpmdW5jdGlvbigpe3JldHVybntkb25lOiEwfX19fTtmdW5jdGlvbiBXbygpe31Xby5wcm90b3R5cGU9e2hhc0ZlYXR1cmU6ZnVuY3Rpb24ocixlKXtyZXR1cm4hMH0sY3JlYXRlRG9jdW1lbnQ6ZnVuY3Rpb24ocixlLHQpe3ZhciBuPWduLlhNTF9BUFBMSUNBVElPTjtyPT09VHQuSFRNTD9uPWduLlhNTF9YSFRNTF9BUFBMSUNBVElPTjpyPT09VHQuU1ZHJiYobj1nbi5YTUxfU1ZHX0lNQUdFKTt2YXIgcz1uZXcgR3QoZXQse2NvbnRlbnRUeXBlOm59KTtpZihzLmltcGxlbWVudGF0aW9uPXRoaXMscy5jaGlsZE5vZGVzPW5ldyBRZSxzLmRvY3R5cGU9dHx8bnVsbCx0JiZzLmFwcGVuZENoaWxkKHQpLGUpe3ZhciBpPXMuY3JlYXRlRWxlbWVudE5TKHIsZSk7cy5hcHBlbmRDaGlsZChpKX1yZXR1cm4gc30sY3JlYXRlRG9jdW1lbnRUeXBlOmZ1bmN0aW9uKHIsZSx0LG4pe01vKHIpO3ZhciBzPW5ldyBucyhldCk7cmV0dXJuIHMubmFtZT1yLHMubm9kZU5hbWU9cixzLnB1YmxpY0lkPWV8fCIiLHMuc3lzdGVtSWQ9dHx8IiIscy5pbnRlcm5hbFN1YnNldD1ufHwiIixzLmNoaWxkTm9kZXM9bmV3IFFlLHN9LGNyZWF0ZUhUTUxEb2N1bWVudDpmdW5jdGlvbihyKXt2YXIgZT1uZXcgR3QoZXQse2NvbnRlbnRUeXBlOmduLkhUTUx9KTtpZihlLmltcGxlbWVudGF0aW9uPXRoaXMsZS5jaGlsZE5vZGVzPW5ldyBRZSxyIT09ITEpe2UuZG9jdHlwZT10aGlzLmNyZWF0ZURvY3VtZW50VHlwZSgiaHRtbCIpLGUuZG9jdHlwZS5vd25lckRvY3VtZW50PWUsZS5hcHBlbmRDaGlsZChlLmRvY3R5cGUpO3ZhciB0PWUuY3JlYXRlRWxlbWVudCgiaHRtbCIpO2UuYXBwZW5kQ2hpbGQodCk7dmFyIG49ZS5jcmVhdGVFbGVtZW50KCJoZWFkIik7aWYodC5hcHBlbmRDaGlsZChuKSx0eXBlb2Ygcj09InN0cmluZyIpe3ZhciBzPWUuY3JlYXRlRWxlbWVudCgidGl0bGUiKTtzLmFwcGVuZENoaWxkKGUuY3JlYXRlVGV4dE5vZGUocikpLG4uYXBwZW5kQ2hpbGQocyl9dC5hcHBlbmRDaGlsZChlLmNyZWF0ZUVsZW1lbnQoImJvZHkiKSl9cmV0dXJuIGV9fTtmdW5jdGlvbiBDZShyKXtudChyKX1DZS5wcm90b3R5cGU9e2ZpcnN0Q2hpbGQ6bnVsbCxsYXN0Q2hpbGQ6bnVsbCxwcmV2aW91c1NpYmxpbmc6bnVsbCxuZXh0U2libGluZzpudWxsLHBhcmVudE5vZGU6bnVsbCxnZXQgcGFyZW50RWxlbWVudCgpe3JldHVybiB0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5ub2RlVHlwZT09PXRoaXMuRUxFTUVOVF9OT0RFP3RoaXMucGFyZW50Tm9kZTpudWxsfSxjaGlsZE5vZGVzOm51bGwsb3duZXJEb2N1bWVudDpudWxsLG5vZGVWYWx1ZTpudWxsLG5hbWVzcGFjZVVSSTpudWxsLHByZWZpeDpudWxsLGxvY2FsTmFtZTpudWxsLGJhc2VVUkk6ImFib3V0OmJsYW5rIixnZXQgaXNDb25uZWN0ZWQoKXt2YXIgcj10aGlzLmdldFJvb3ROb2RlKCk7cmV0dXJuIHImJnIubm9kZVR5cGU9PT1yLkRPQ1VNRU5UX05PREV9LGNvbnRhaW5zOmZ1bmN0aW9uKHIpe2lmKCFyKXJldHVybiExO3ZhciBlPXI7ZG97aWYodGhpcz09PWUpcmV0dXJuITA7ZT1lLnBhcmVudE5vZGV9d2hpbGUoZSk7cmV0dXJuITF9LGdldFJvb3ROb2RlOmZ1bmN0aW9uKHIpe3ZhciBlPXRoaXM7ZG97aWYoIWUucGFyZW50Tm9kZSlyZXR1cm4gZTtlPWUucGFyZW50Tm9kZX13aGlsZShlKX0saXNFcXVhbE5vZGU6ZnVuY3Rpb24ocil7aWYoIXIpcmV0dXJuITE7Zm9yKHZhciBlPVt7bm9kZTp0aGlzLG90aGVyOnJ9XTtlLmxlbmd0aD4wOyl7dmFyIHQ9ZS5wb3AoKSxuPXQubm9kZSxzPXQub3RoZXI7aWYobi5ub2RlVHlwZSE9PXMubm9kZVR5cGUpcmV0dXJuITE7c3dpdGNoKG4ubm9kZVR5cGUpe2Nhc2Ugbi5ET0NVTUVOVF9UWVBFX05PREU6aWYobi5uYW1lIT09cy5uYW1lfHxuLnB1YmxpY0lkIT09cy5wdWJsaWNJZHx8bi5zeXN0ZW1JZCE9PXMuc3lzdGVtSWQpcmV0dXJuITE7YnJlYWs7Y2FzZSBuLkVMRU1FTlRfTk9ERTppZihuLm5hbWVzcGFjZVVSSSE9PXMubmFtZXNwYWNlVVJJfHxuLnByZWZpeCE9PXMucHJlZml4fHxuLmxvY2FsTmFtZSE9PXMubG9jYWxOYW1lfHxuLmF0dHJpYnV0ZXMubGVuZ3RoIT09cy5hdHRyaWJ1dGVzLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIGk9MDtpPG4uYXR0cmlidXRlcy5sZW5ndGg7aSsrKXt2YXIgYT1uLmF0dHJpYnV0ZXMuaXRlbShpKSxvPXMuZ2V0QXR0cmlidXRlTm9kZU5TKGEubmFtZXNwYWNlVVJJLGEubG9jYWxOYW1lKTtpZighbylyZXR1cm4hMTtlLnB1c2goe25vZGU6YSxvdGhlcjpvfSl9YnJlYWs7Y2FzZSBuLkFUVFJJQlVURV9OT0RFOmlmKG4ubmFtZXNwYWNlVVJJIT09cy5uYW1lc3BhY2VVUkl8fG4ubG9jYWxOYW1lIT09cy5sb2NhbE5hbWV8fG4udmFsdWUhPT1zLnZhbHVlKXJldHVybiExO2JyZWFrO2Nhc2Ugbi5QUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREU6aWYobi50YXJnZXQhPT1zLnRhcmdldHx8bi5kYXRhIT09cy5kYXRhKXJldHVybiExO2JyZWFrO2Nhc2Ugbi5URVhUX05PREU6Y2FzZSBuLkNEQVRBX1NFQ1RJT05fTk9ERTpjYXNlIG4uQ09NTUVOVF9OT0RFOmlmKG4uZGF0YSE9PXMuZGF0YSlyZXR1cm4hMTticmVha31pZihuLmNoaWxkTm9kZXMubGVuZ3RoIT09cy5jaGlsZE5vZGVzLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIGk9bi5jaGlsZE5vZGVzLmxlbmd0aC0xO2k+PTA7aS0tKWUucHVzaCh7bm9kZTpuLmNoaWxkTm9kZXNbaV0sb3RoZXI6cy5jaGlsZE5vZGVzW2ldfSl9cmV0dXJuITB9LGlzU2FtZU5vZGU6ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXM9PT1yfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24ocixlKXtyZXR1cm4gZXModGhpcyxyLGUpfSxyZXBsYWNlQ2hpbGQ6ZnVuY3Rpb24ocixlKXtlcyh0aGlzLHIsZSxqbyksZSYmdGhpcy5yZW1vdmVDaGlsZChlKX0scmVtb3ZlQ2hpbGQ6ZnVuY3Rpb24ocil7cmV0dXJuIFZvKHRoaXMscil9LGFwcGVuZENoaWxkOmZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShyLG51bGwpfSxoYXNDaGlsZE5vZGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlyc3RDaGlsZCE9bnVsbH0sY2xvbmVOb2RlOmZ1bmN0aW9uKHIpe3JldHVybiB0dSh0aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMsdGhpcyxyKX0sbm9ybWFsaXplOmZ1bmN0aW9uKCl7SmUodGhpcyxudWxsLHtlbnRlcjpmdW5jdGlvbihyKXtmb3IodmFyIGU9ci5maXJzdENoaWxkO2U7KXt2YXIgdD1lLm5leHRTaWJsaW5nO3QhPT1udWxsJiZ0Lm5vZGVUeXBlPT09am4mJmUubm9kZVR5cGU9PT1qbj8oci5yZW1vdmVDaGlsZCh0KSxlLmFwcGVuZERhdGEodC5kYXRhKSk6ZT10fXJldHVybiEwfX0pfSxpc1N1cHBvcnRlZDpmdW5jdGlvbihyLGUpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuaW1wbGVtZW50YXRpb24uaGFzRmVhdHVyZShyLGUpfSxsb29rdXBQcmVmaXg6ZnVuY3Rpb24ocil7Zm9yKHZhciBlPXRoaXM7ZTspe3ZhciB0PWUuX25zTWFwO2lmKHQpe2Zvcih2YXIgbiBpbiB0KWlmKF9yKHQsbikmJnRbbl09PT1yKXJldHVybiBufWU9ZS5ub2RlVHlwZT09RnI/ZS5vd25lckRvY3VtZW50OmUucGFyZW50Tm9kZX1yZXR1cm4gbnVsbH0sbG9va3VwTmFtZXNwYWNlVVJJOmZ1bmN0aW9uKHIpe2Zvcih2YXIgZT10aGlzO2U7KXt2YXIgdD1lLl9uc01hcDtpZih0JiZfcih0LHIpKXJldHVybiB0W3JdO2U9ZS5ub2RlVHlwZT09RnI/ZS5vd25lckRvY3VtZW50OmUucGFyZW50Tm9kZX1yZXR1cm4gbnVsbH0saXNEZWZhdWx0TmFtZXNwYWNlOmZ1bmN0aW9uKHIpe3ZhciBlPXRoaXMubG9va3VwUHJlZml4KHIpO3JldHVybiBlPT1udWxsfSxjb21wYXJlRG9jdW1lbnRQb3NpdGlvbjpmdW5jdGlvbihyKXtpZih0aGlzPT09cilyZXR1cm4gMDt2YXIgZT1yLHQ9dGhpcyxuPW51bGwscz1udWxsO2lmKGUgaW5zdGFuY2VvZiBkciYmKG49ZSxlPW4ub3duZXJFbGVtZW50KSx0IGluc3RhbmNlb2YgZHImJihzPXQsdD1zLm93bmVyRWxlbWVudCxuJiZlJiZ0PT09ZSkpZm9yKHZhciBpPTAsYTthPXQuYXR0cmlidXRlc1tpXTtpKyspe2lmKGE9PT1uKXJldHVybiBGZS5ET0NVTUVOVF9QT1NJVElPTl9JTVBMRU1FTlRBVElPTl9TUEVDSUZJQytGZS5ET0NVTUVOVF9QT1NJVElPTl9QUkVDRURJTkc7aWYoYT09PXMpcmV0dXJuIEZlLkRPQ1VNRU5UX1BPU0lUSU9OX0lNUExFTUVOVEFUSU9OX1NQRUNJRklDK0ZlLkRPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lOR31pZighZXx8IXR8fHQub3duZXJEb2N1bWVudCE9PWUub3duZXJEb2N1bWVudClyZXR1cm4gRmUuRE9DVU1FTlRfUE9TSVRJT05fRElTQ09OTkVDVEVEK0ZlLkRPQ1VNRU5UX1BPU0lUSU9OX0lNUExFTUVOVEFUSU9OX1NQRUNJRklDKyhHbyh0Lm93bmVyRG9jdW1lbnQpPkdvKGUub3duZXJEb2N1bWVudCk/RmUuRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HOkZlLkRPQ1VNRU5UX1BPU0lUSU9OX1BSRUNFRElORyk7aWYocyYmZT09PXQpcmV0dXJuIEZlLkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5TK0ZlLkRPQ1VNRU5UX1BPU0lUSU9OX1BSRUNFRElORztpZihuJiZlPT09dClyZXR1cm4gRmUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZK0ZlLkRPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lORztmb3IodmFyIG89W10sdT1lLnBhcmVudE5vZGU7dTspe2lmKCFzJiZ1PT09dClyZXR1cm4gRmUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZK0ZlLkRPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lORztvLnB1c2godSksdT11LnBhcmVudE5vZGV9by5yZXZlcnNlKCk7Zm9yKHZhciBsPVtdLEE9dC5wYXJlbnROb2RlO0E7KXtpZighbiYmQT09PWUpcmV0dXJuIEZlLkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5TK0ZlLkRPQ1VNRU5UX1BPU0lUSU9OX1BSRUNFRElORztsLnB1c2goQSksQT1BLnBhcmVudE5vZGV9bC5yZXZlcnNlKCk7dmFyIGQ9VW8obyxsKTtmb3IodmFyIGcgaW4gZC5jaGlsZE5vZGVzKXt2YXIgZj1kLmNoaWxkTm9kZXNbZ107aWYoZj09PXQpcmV0dXJuIEZlLkRPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lORztpZihmPT09ZSlyZXR1cm4gRmUuRE9DVU1FTlRfUE9TSVRJT05fUFJFQ0VESU5HO2lmKGwuaW5kZXhPZihmKT49MClyZXR1cm4gRmUuRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HO2lmKG8uaW5kZXhPZihmKT49MClyZXR1cm4gRmUuRE9DVU1FTlRfUE9TSVRJT05fUFJFQ0VESU5HfXJldHVybiAwfX07ZnVuY3Rpb24gS28ocil7cmV0dXJuIHI9PSI8IiYmIiZsdDsifHxyPT0iPiImJiImZ3Q7Inx8cj09IiYiJiYiJmFtcDsifHxyPT0nIicmJiImcXVvdDsifHwiJiMiK3IuY2hhckNvZGVBdCgpKyI7In1ScihpdCxDZSksUnIoaXQsQ2UucHJvdG90eXBlKSxScihGZSxDZSksUnIoRmUsQ2UucHJvdG90eXBlKTtmdW5jdGlvbiAkbihyLGUpe0plKHIsbnVsbCx7ZW50ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIGUodCk/SmUuU1RPUDohMH19KX1mdW5jdGlvbiBKZShyLGUsdCl7Zm9yKHZhciBuPVt7bm9kZTpyLGNvbnRleHQ6ZSxwaGFzZTpKZS5FTlRFUn1dO24ubGVuZ3RoPjA7KXt2YXIgcz1uLnBvcCgpO2lmKHMucGhhc2U9PT1KZS5FTlRFUil7dmFyIGk9dC5lbnRlcihzLm5vZGUscy5jb250ZXh0KTtpZihpPT09SmUuU1RPUClyZXR1cm4gSmUuU1RPUDtpZihuLnB1c2goe25vZGU6cy5ub2RlLGNvbnRleHQ6aSxwaGFzZTpKZS5FWElUfSksaT09bnVsbCljb250aW51ZTtmb3IodmFyIGE9cy5ub2RlLmxhc3RDaGlsZDthOyluLnB1c2goe25vZGU6YSxjb250ZXh0OmkscGhhc2U6SmUuRU5URVJ9KSxhPWEucHJldmlvdXNTaWJsaW5nfWVsc2UgdC5leGl0JiZ0LmV4aXQocy5ub2RlLHMuY29udGV4dCl9fUplLlNUT1A9U3ltYm9sKCJ3YWxrRE9NLlNUT1AiKSxKZS5FTlRFUj0wLEplLkVYSVQ9MTtmdW5jdGlvbiBHdChyLGUpe250KHIpO3ZhciB0PWV8fHt9O3RoaXMub3duZXJEb2N1bWVudD10aGlzLHRoaXMuY29udGVudFR5cGU9dC5jb250ZW50VHlwZXx8Z24uWE1MX0FQUExJQ0FUSU9OLHRoaXMudHlwZT1tZih0aGlzLmNvbnRlbnRUeXBlKT8iaHRtbCI6InhtbCJ9ZnVuY3Rpb24gTmYocixlLHQpe3ImJnIuX2luYysrO3ZhciBuPXQubmFtZXNwYWNlVVJJO249PT1UdC5YTUxOUyYmKGUuX25zTWFwW3QucHJlZml4P3QubG9jYWxOYW1lOiIiXT10LnZhbHVlKX1mdW5jdGlvbiBZbyhyLGUsdCxuKXtyJiZyLl9pbmMrKzt2YXIgcz10Lm5hbWVzcGFjZVVSSTtzPT09VHQuWE1MTlMmJmRlbGV0ZSBlLl9uc01hcFt0LnByZWZpeD90LmxvY2FsTmFtZToiIl19ZnVuY3Rpb24gWm8ocixlLHQpe2lmKHImJnIuX2luYyl7ci5faW5jKys7dmFyIG49ZS5jaGlsZE5vZGVzO2lmKHQmJiF0Lm5leHRTaWJsaW5nKW5bbi5sZW5ndGgrK109dDtlbHNle2Zvcih2YXIgcz1lLmZpcnN0Q2hpbGQsaT0wO3M7KW5baSsrXT1zLHM9cy5uZXh0U2libGluZztuLmxlbmd0aD1pLGRlbGV0ZSBuW24ubGVuZ3RoXX19fWZ1bmN0aW9uIFZvKHIsZSl7aWYociE9PWUucGFyZW50Tm9kZSl0aHJvdyBuZXcgbmUobmUuTk9UX0ZPVU5EX0VSUiwiY2hpbGQncyBwYXJlbnQgaXMgbm90IHBhcmVudCIpO3ZhciB0PWUucHJldmlvdXNTaWJsaW5nLG49ZS5uZXh0U2libGluZztyZXR1cm4gdD90Lm5leHRTaWJsaW5nPW46ci5maXJzdENoaWxkPW4sbj9uLnByZXZpb3VzU2libGluZz10OnIubGFzdENoaWxkPXQsWm8oci5vd25lckRvY3VtZW50LHIpLGUucGFyZW50Tm9kZT1udWxsLGUucHJldmlvdXNTaWJsaW5nPW51bGwsZS5uZXh0U2libGluZz1udWxsLGV9ZnVuY3Rpb24ga2Yocil7cmV0dXJuIHImJihyLm5vZGVUeXBlPT09Q2UuRE9DVU1FTlRfTk9ERXx8ci5ub2RlVHlwZT09PUNlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREV8fHIubm9kZVR5cGU9PT1DZS5FTEVNRU5UX05PREUpfWZ1bmN0aW9uIHhmKHIpe3JldHVybiByJiYoci5ub2RlVHlwZT09PUNlLkNEQVRBX1NFQ1RJT05fTk9ERXx8ci5ub2RlVHlwZT09PUNlLkNPTU1FTlRfTk9ERXx8ci5ub2RlVHlwZT09PUNlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREV8fHIubm9kZVR5cGU9PT1DZS5ET0NVTUVOVF9UWVBFX05PREV8fHIubm9kZVR5cGU9PT1DZS5FTEVNRU5UX05PREV8fHIubm9kZVR5cGU9PT1DZS5QUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREV8fHIubm9kZVR5cGU9PT1DZS5URVhUX05PREUpfWZ1bmN0aW9uIHRyKHIpe3JldHVybiByJiZyLm5vZGVUeXBlPT09Q2UuRE9DVU1FTlRfVFlQRV9OT0RFfWZ1bmN0aW9uIEh0KHIpe3JldHVybiByJiZyLm5vZGVUeXBlPT09Q2UuRUxFTUVOVF9OT0RFfWZ1bmN0aW9uIHpvKHIpe3JldHVybiByJiZyLm5vZGVUeXBlPT09Q2UuVEVYVF9OT0RFfWZ1bmN0aW9uIEpvKHIsZSl7dmFyIHQ9ci5jaGlsZE5vZGVzfHxbXTtpZih4dCh0LEh0KXx8dHIoZSkpcmV0dXJuITE7dmFyIG49eHQodCx0cik7cmV0dXJuIShlJiZuJiZ0LmluZGV4T2Yobik+dC5pbmRleE9mKGUpKX1mdW5jdGlvbiBxbyhyLGUpe3ZhciB0PXIuY2hpbGROb2Rlc3x8W107ZnVuY3Rpb24gbihpKXtyZXR1cm4gSHQoaSkmJmkhPT1lfWlmKHh0KHQsbikpcmV0dXJuITE7dmFyIHM9eHQodCx0cik7cmV0dXJuIShlJiZzJiZ0LmluZGV4T2Yocyk+dC5pbmRleE9mKGUpKX1mdW5jdGlvbiBUZihyLGUsdCl7aWYoIWtmKHIpKXRocm93IG5ldyBuZShuZS5ISUVSQVJDSFlfUkVRVUVTVF9FUlIsIlVuZXhwZWN0ZWQgcGFyZW50IG5vZGUgdHlwZSAiK3Iubm9kZVR5cGUpO2lmKHQmJnQucGFyZW50Tm9kZSE9PXIpdGhyb3cgbmV3IG5lKG5lLk5PVF9GT1VORF9FUlIsImNoaWxkIG5vdCBpbiBwYXJlbnQiKTtpZigheGYoZSl8fHRyKGUpJiZyLm5vZGVUeXBlIT09Q2UuRE9DVU1FTlRfTk9ERSl0aHJvdyBuZXcgbmUobmUuSElFUkFSQ0hZX1JFUVVFU1RfRVJSLCJVbmV4cGVjdGVkIG5vZGUgdHlwZSAiK2Uubm9kZVR5cGUrIiBmb3IgcGFyZW50IG5vZGUgdHlwZSAiK3Iubm9kZVR5cGUpfWZ1bmN0aW9uIEJmKHIsZSx0KXt2YXIgbj1yLmNoaWxkTm9kZXN8fFtdLHM9ZS5jaGlsZE5vZGVzfHxbXTtpZihlLm5vZGVUeXBlPT09Q2UuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSl7dmFyIGk9cy5maWx0ZXIoSHQpO2lmKGkubGVuZ3RoPjF8fHh0KHMsem8pKXRocm93IG5ldyBuZShuZS5ISUVSQVJDSFlfUkVRVUVTVF9FUlIsIk1vcmUgdGhhbiBvbmUgZWxlbWVudCBvciB0ZXh0IGluIGZyYWdtZW50Iik7aWYoaS5sZW5ndGg9PT0xJiYhSm8ocix0KSl0aHJvdyBuZXcgbmUobmUuSElFUkFSQ0hZX1JFUVVFU1RfRVJSLCJFbGVtZW50IGluIGZyYWdtZW50IGNhbiBub3QgYmUgaW5zZXJ0ZWQgYmVmb3JlIGRvY3R5cGUiKX1pZihIdChlKSYmIUpvKHIsdCkpdGhyb3cgbmV3IG5lKG5lLkhJRVJBUkNIWV9SRVFVRVNUX0VSUiwiT25seSBvbmUgZWxlbWVudCBjYW4gYmUgYWRkZWQgYW5kIG9ubHkgYWZ0ZXIgZG9jdHlwZSIpO2lmKHRyKGUpKXtpZih4dChuLHRyKSl0aHJvdyBuZXcgbmUobmUuSElFUkFSQ0hZX1JFUVVFU1RfRVJSLCJPbmx5IG9uZSBkb2N0eXBlIGlzIGFsbG93ZWQiKTt2YXIgYT14dChuLEh0KTtpZih0JiZuLmluZGV4T2YoYSk8bi5pbmRleE9mKHQpKXRocm93IG5ldyBuZShuZS5ISUVSQVJDSFlfUkVRVUVTVF9FUlIsIkRvY3R5cGUgY2FuIG9ubHkgYmUgaW5zZXJ0ZWQgYmVmb3JlIGFuIGVsZW1lbnQiKTtpZighdCYmYSl0aHJvdyBuZXcgbmUobmUuSElFUkFSQ0hZX1JFUVVFU1RfRVJSLCJEb2N0eXBlIGNhbiBub3QgYmUgYXBwZW5kZWQgc2luY2UgZWxlbWVudCBpcyBwcmVzZW50Iil9fWZ1bmN0aW9uIGpvKHIsZSx0KXt2YXIgbj1yLmNoaWxkTm9kZXN8fFtdLHM9ZS5jaGlsZE5vZGVzfHxbXTtpZihlLm5vZGVUeXBlPT09Q2UuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSl7dmFyIGk9cy5maWx0ZXIoSHQpO2lmKGkubGVuZ3RoPjF8fHh0KHMsem8pKXRocm93IG5ldyBuZShuZS5ISUVSQVJDSFlfUkVRVUVTVF9FUlIsIk1vcmUgdGhhbiBvbmUgZWxlbWVudCBvciB0ZXh0IGluIGZyYWdtZW50Iik7aWYoaS5sZW5ndGg9PT0xJiYhcW8ocix0KSl0aHJvdyBuZXcgbmUobmUuSElFUkFSQ0hZX1JFUVVFU1RfRVJSLCJFbGVtZW50IGluIGZyYWdtZW50IGNhbiBub3QgYmUgaW5zZXJ0ZWQgYmVmb3JlIGRvY3R5cGUiKX1pZihIdChlKSYmIXFvKHIsdCkpdGhyb3cgbmV3IG5lKG5lLkhJRVJBUkNIWV9SRVFVRVNUX0VSUiwiT25seSBvbmUgZWxlbWVudCBjYW4gYmUgYWRkZWQgYW5kIG9ubHkgYWZ0ZXIgZG9jdHlwZSIpO2lmKHRyKGUpKXtpZih4dChuLGZ1bmN0aW9uKHUpe3JldHVybiB0cih1KSYmdSE9PXR9KSl0aHJvdyBuZXcgbmUobmUuSElFUkFSQ0hZX1JFUVVFU1RfRVJSLCJPbmx5IG9uZSBkb2N0eXBlIGlzIGFsbG93ZWQiKTt2YXIgYT14dChuLEh0KTtpZih0JiZuLmluZGV4T2YoYSk8bi5pbmRleE9mKHQpKXRocm93IG5ldyBuZShuZS5ISUVSQVJDSFlfUkVRVUVTVF9FUlIsIkRvY3R5cGUgY2FuIG9ubHkgYmUgaW5zZXJ0ZWQgYmVmb3JlIGFuIGVsZW1lbnQiKX19ZnVuY3Rpb24gZXMocixlLHQsbil7VGYocixlLHQpLHIubm9kZVR5cGU9PT1DZS5ET0NVTUVOVF9OT0RFJiYobnx8QmYpKHIsZSx0KTt2YXIgcz1lLnBhcmVudE5vZGU7aWYocyYmcy5yZW1vdmVDaGlsZChlKSxlLm5vZGVUeXBlPT09ZXIpe3ZhciBpPWUuZmlyc3RDaGlsZDtpZihpPT1udWxsKXJldHVybiBlO3ZhciBhPWUubGFzdENoaWxkfWVsc2UgaT1hPWU7dmFyIG89dD90LnByZXZpb3VzU2libGluZzpyLmxhc3RDaGlsZDtpLnByZXZpb3VzU2libGluZz1vLGEubmV4dFNpYmxpbmc9dCxvP28ubmV4dFNpYmxpbmc9aTpyLmZpcnN0Q2hpbGQ9aSx0PT1udWxsP3IubGFzdENoaWxkPWE6dC5wcmV2aW91c1NpYmxpbmc9YTtkbyBpLnBhcmVudE5vZGU9cjt3aGlsZShpIT09YSYmKGk9aS5uZXh0U2libGluZykpO3JldHVybiBabyhyLm93bmVyRG9jdW1lbnR8fHIscixlKSxlLm5vZGVUeXBlPT1lciYmKGUuZmlyc3RDaGlsZD1lLmxhc3RDaGlsZD1udWxsKSxlfUd0LnByb3RvdHlwZT17aW1wbGVtZW50YXRpb246bnVsbCxub2RlTmFtZToiI2RvY3VtZW50Iixub2RlVHlwZTpNcixkb2N0eXBlOm51bGwsZG9jdW1lbnRFbGVtZW50Om51bGwsX2luYzoxLGluc2VydEJlZm9yZTpmdW5jdGlvbihyLGUpe2lmKHIubm9kZVR5cGU9PT1lcil7Zm9yKHZhciB0PXIuZmlyc3RDaGlsZDt0Oyl7dmFyIG49dC5uZXh0U2libGluZzt0aGlzLmluc2VydEJlZm9yZSh0LGUpLHQ9bn1yZXR1cm4gcn1yZXR1cm4gZXModGhpcyxyLGUpLHIub3duZXJEb2N1bWVudD10aGlzLHRoaXMuZG9jdW1lbnRFbGVtZW50PT09bnVsbCYmci5ub2RlVHlwZT09PWJ0JiYodGhpcy5kb2N1bWVudEVsZW1lbnQ9cikscn0scmVtb3ZlQ2hpbGQ6ZnVuY3Rpb24ocil7dmFyIGU9Vm8odGhpcyxyKTtyZXR1cm4gZT09PXRoaXMuZG9jdW1lbnRFbGVtZW50JiYodGhpcy5kb2N1bWVudEVsZW1lbnQ9bnVsbCksZX0scmVwbGFjZUNoaWxkOmZ1bmN0aW9uKHIsZSl7ZXModGhpcyxyLGUsam8pLHIub3duZXJEb2N1bWVudD10aGlzLGUmJnRoaXMucmVtb3ZlQ2hpbGQoZSksSHQocikmJih0aGlzLmRvY3VtZW50RWxlbWVudD1yKX0saW1wb3J0Tm9kZTpmdW5jdGlvbihyLGUpe3JldHVybiBfZih0aGlzLHIsZSl9LGdldEVsZW1lbnRCeUlkOmZ1bmN0aW9uKHIpe3ZhciBlPW51bGw7cmV0dXJuICRuKHRoaXMuZG9jdW1lbnRFbGVtZW50LGZ1bmN0aW9uKHQpe2lmKHQubm9kZVR5cGU9PWJ0JiZ0LmdldEF0dHJpYnV0ZSgiaWQiKT09cilyZXR1cm4gZT10LCEwfSksZX0sY3JlYXRlRWxlbWVudDpmdW5jdGlvbihyKXt2YXIgZT1uZXcgUXQoZXQpO2Uub3duZXJEb2N1bWVudD10aGlzLHRoaXMudHlwZT09PSJodG1sIiYmKHI9ci50b0xvd2VyQ2FzZSgpKSxnZih0aGlzLmNvbnRlbnRUeXBlKSYmKGUubmFtZXNwYWNlVVJJPVR0LkhUTUwpLGUubm9kZU5hbWU9cixlLnRhZ05hbWU9cixlLmxvY2FsTmFtZT1yLGUuY2hpbGROb2Rlcz1uZXcgUWU7dmFyIHQ9ZS5hdHRyaWJ1dGVzPW5ldyBPcjtyZXR1cm4gdC5fb3duZXJFbGVtZW50PWUsZX0sY3JlYXRlRG9jdW1lbnRGcmFnbWVudDpmdW5jdGlvbigpe3ZhciByPW5ldyBQcihldCk7cmV0dXJuIHIub3duZXJEb2N1bWVudD10aGlzLHIuY2hpbGROb2Rlcz1uZXcgUWUscn0sY3JlYXRlVGV4dE5vZGU6ZnVuY3Rpb24ocil7dmFyIGU9bmV3IG1uKGV0KTtyZXR1cm4gZS5vd25lckRvY3VtZW50PXRoaXMsZS5jaGlsZE5vZGVzPW5ldyBRZSxlLmFwcGVuZERhdGEociksZX0sY3JlYXRlQ29tbWVudDpmdW5jdGlvbihyKXt2YXIgZT1uZXcgdHMoZXQpO3JldHVybiBlLm93bmVyRG9jdW1lbnQ9dGhpcyxlLmNoaWxkTm9kZXM9bmV3IFFlLGUuYXBwZW5kRGF0YShyKSxlfSxjcmVhdGVDREFUQVNlY3Rpb246ZnVuY3Rpb24ocil7aWYoci5pbmRleE9mKCJdXT4iKSE9PS0xKXRocm93IG5ldyBuZShuZS5JTlZBTElEX0NIQVJBQ1RFUl9FUlIsJ2RhdGEgY29udGFpbnMgIl1dPiInKTt2YXIgZT1uZXcgcnMoZXQpO3JldHVybiBlLm93bmVyRG9jdW1lbnQ9dGhpcyxlLmNoaWxkTm9kZXM9bmV3IFFlLGUuYXBwZW5kRGF0YShyKSxlfSxjcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246ZnVuY3Rpb24ocixlKXt2YXIgdD1uZXcgaXMoZXQpO3JldHVybiB0Lm93bmVyRG9jdW1lbnQ9dGhpcyx0LmNoaWxkTm9kZXM9bmV3IFFlLHQubm9kZU5hbWU9dC50YXJnZXQ9cix0Lm5vZGVWYWx1ZT10LmRhdGE9ZSx0fSxjcmVhdGVBdHRyaWJ1dGU6ZnVuY3Rpb24ocil7aWYoIXplLlFOYW1lX2V4YWN0LnRlc3QocikpdGhyb3cgbmV3IG5lKG5lLklOVkFMSURfQ0hBUkFDVEVSX0VSUiwnaW52YWxpZCBjaGFyYWN0ZXIgaW4gbmFtZSAiJytyKyciJyk7cmV0dXJuIHRoaXMudHlwZT09PSJodG1sIiYmKHI9ci50b0xvd2VyQ2FzZSgpKSx0aGlzLl9jcmVhdGVBdHRyaWJ1dGUocil9LF9jcmVhdGVBdHRyaWJ1dGU6ZnVuY3Rpb24ocil7dmFyIGU9bmV3IGRyKGV0KTtyZXR1cm4gZS5vd25lckRvY3VtZW50PXRoaXMsZS5jaGlsZE5vZGVzPW5ldyBRZSxlLm5hbWU9cixlLm5vZGVOYW1lPXIsZS5sb2NhbE5hbWU9cixlLnNwZWNpZmllZD0hMCxlfSxjcmVhdGVFbnRpdHlSZWZlcmVuY2U6ZnVuY3Rpb24ocil7aWYoIXplLk5hbWUudGVzdChyKSl0aHJvdyBuZXcgbmUobmUuSU5WQUxJRF9DSEFSQUNURVJfRVJSLCdub3QgYSB2YWxpZCB4bWwgbmFtZSAiJytyKyciJyk7aWYodGhpcy50eXBlPT09Imh0bWwiKXRocm93IG5ldyBuZSgiZG9jdW1lbnQgaXMgYW4gaHRtbCBkb2N1bWVudCIsbXQuTm90U3VwcG9ydGVkRXJyb3IpO3ZhciBlPW5ldyBzcyhldCk7cmV0dXJuIGUub3duZXJEb2N1bWVudD10aGlzLGUuY2hpbGROb2Rlcz1uZXcgUWUsZS5ub2RlTmFtZT1yLGV9LGNyZWF0ZUVsZW1lbnROUzpmdW5jdGlvbihyLGUpe3ZhciB0PWZpKHIsZSksbj1uZXcgUXQoZXQpLHM9bi5hdHRyaWJ1dGVzPW5ldyBPcjtyZXR1cm4gbi5jaGlsZE5vZGVzPW5ldyBRZSxuLm93bmVyRG9jdW1lbnQ9dGhpcyxuLm5vZGVOYW1lPWUsbi50YWdOYW1lPWUsbi5uYW1lc3BhY2VVUkk9dFswXSxuLnByZWZpeD10WzFdLG4ubG9jYWxOYW1lPXRbMl0scy5fb3duZXJFbGVtZW50PW4sbn0sY3JlYXRlQXR0cmlidXRlTlM6ZnVuY3Rpb24ocixlKXt2YXIgdD1maShyLGUpLG49bmV3IGRyKGV0KTtyZXR1cm4gbi5vd25lckRvY3VtZW50PXRoaXMsbi5jaGlsZE5vZGVzPW5ldyBRZSxuLm5vZGVOYW1lPWUsbi5uYW1lPWUsbi5zcGVjaWZpZWQ9ITAsbi5uYW1lc3BhY2VVUkk9dFswXSxuLnByZWZpeD10WzFdLG4ubG9jYWxOYW1lPXRbMl0sbn19LHN0KEd0LENlKTtmdW5jdGlvbiBRdChyKXtudChyKSx0aGlzLl9uc01hcD1PYmplY3QuY3JlYXRlKG51bGwpfVF0LnByb3RvdHlwZT17bm9kZVR5cGU6YnQsYXR0cmlidXRlczpudWxsLGdldFF1YWxpZmllZE5hbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmVmaXg/dGhpcy5wcmVmaXgrIjoiK3RoaXMubG9jYWxOYW1lOnRoaXMubG9jYWxOYW1lfSxfaXNJbkhUTUxEb2N1bWVudEFuZE5hbWVzcGFjZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQudHlwZT09PSJodG1sIiYmdGhpcy5uYW1lc3BhY2VVUkk9PT1UdC5IVE1MfSxoYXNBdHRyaWJ1dGVzOmZ1bmN0aW9uKCl7cmV0dXJuISEodGhpcy5hdHRyaWJ1dGVzJiZ0aGlzLmF0dHJpYnV0ZXMubGVuZ3RoKX0saGFzQXR0cmlidXRlOmZ1bmN0aW9uKHIpe3JldHVybiEhdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKHIpfSxnZXRBdHRyaWJ1dGU6ZnVuY3Rpb24ocil7dmFyIGU9dGhpcy5nZXRBdHRyaWJ1dGVOb2RlKHIpO3JldHVybiBlP2UudmFsdWU6bnVsbH0sZ2V0QXR0cmlidXRlTm9kZTpmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5faXNJbkhUTUxEb2N1bWVudEFuZE5hbWVzcGFjZSgpJiYocj1yLnRvTG93ZXJDYXNlKCkpLHRoaXMuYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0ocil9LHNldEF0dHJpYnV0ZTpmdW5jdGlvbihyLGUpe3RoaXMuX2lzSW5IVE1MRG9jdW1lbnRBbmROYW1lc3BhY2UoKSYmKHI9ci50b0xvd2VyQ2FzZSgpKTt2YXIgdD10aGlzLmdldEF0dHJpYnV0ZU5vZGUocik7dD90LnZhbHVlPXQubm9kZVZhbHVlPSIiK2U6KHQ9dGhpcy5vd25lckRvY3VtZW50Ll9jcmVhdGVBdHRyaWJ1dGUociksdC52YWx1ZT10Lm5vZGVWYWx1ZT0iIitlLHRoaXMuc2V0QXR0cmlidXRlTm9kZSh0KSl9LHJlbW92ZUF0dHJpYnV0ZTpmdW5jdGlvbihyKXt2YXIgZT10aGlzLmdldEF0dHJpYnV0ZU5vZGUocik7ZSYmdGhpcy5yZW1vdmVBdHRyaWJ1dGVOb2RlKGUpfSxzZXRBdHRyaWJ1dGVOb2RlOmZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLmF0dHJpYnV0ZXMuc2V0TmFtZWRJdGVtKHIpfSxzZXRBdHRyaWJ1dGVOb2RlTlM6ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuYXR0cmlidXRlcy5zZXROYW1lZEl0ZW1OUyhyKX0scmVtb3ZlQXR0cmlidXRlTm9kZTpmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzLnJlbW92ZU5hbWVkSXRlbShyLm5vZGVOYW1lKX0scmVtb3ZlQXR0cmlidXRlTlM6ZnVuY3Rpb24ocixlKXt2YXIgdD10aGlzLmdldEF0dHJpYnV0ZU5vZGVOUyhyLGUpO3QmJnRoaXMucmVtb3ZlQXR0cmlidXRlTm9kZSh0KX0saGFzQXR0cmlidXRlTlM6ZnVuY3Rpb24ocixlKXtyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlTlMocixlKSE9bnVsbH0sZ2V0QXR0cmlidXRlTlM6ZnVuY3Rpb24ocixlKXt2YXIgdD10aGlzLmdldEF0dHJpYnV0ZU5vZGVOUyhyLGUpO3JldHVybiB0P3QudmFsdWU6bnVsbH0sc2V0QXR0cmlidXRlTlM6ZnVuY3Rpb24ocixlLHQpe3ZhciBuPWZpKHIsZSkscz1uWzJdLGk9dGhpcy5nZXRBdHRyaWJ1dGVOb2RlTlMocixzKTtpP2kudmFsdWU9aS5ub2RlVmFsdWU9IiIrdDooaT10aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlQXR0cmlidXRlTlMocixlKSxpLnZhbHVlPWkubm9kZVZhbHVlPSIiK3QsdGhpcy5zZXRBdHRyaWJ1dGVOb2RlKGkpKX0sZ2V0QXR0cmlidXRlTm9kZU5TOmZ1bmN0aW9uKHIsZSl7cmV0dXJuIHRoaXMuYXR0cmlidXRlcy5nZXROYW1lZEl0ZW1OUyhyLGUpfSxnZXRFbGVtZW50c0J5Q2xhc3NOYW1lOmZ1bmN0aW9uKHIpe3ZhciBlPUZvKHIpO3JldHVybiBuZXcgQnQodGhpcyxmdW5jdGlvbih0KXt2YXIgbj1bXTtyZXR1cm4gZS5sZW5ndGg+MCYmJG4odCxmdW5jdGlvbihzKXtpZihzIT09dCYmcy5ub2RlVHlwZT09PWJ0KXt2YXIgaT1zLmdldEF0dHJpYnV0ZSgiY2xhc3MiKTtpZihpKXt2YXIgYT1yPT09aTtpZighYSl7dmFyIG89Rm8oaSk7YT1lLmV2ZXJ5KHZmKG8pKX1hJiZuLnB1c2gocyl9fX0pLG59KX0sZ2V0RWxlbWVudHNCeVRhZ05hbWU6ZnVuY3Rpb24ocil7dmFyIGU9KHRoaXMubm9kZVR5cGU9PT1Ncj90aGlzOnRoaXMub3duZXJEb2N1bWVudCkudHlwZT09PSJodG1sIix0PXIudG9Mb3dlckNhc2UoKTtyZXR1cm4gbmV3IEJ0KHRoaXMsZnVuY3Rpb24obil7dmFyIHM9W107cmV0dXJuICRuKG4sZnVuY3Rpb24oaSl7aWYoIShpPT09bnx8aS5ub2RlVHlwZSE9PWJ0KSlpZihyPT09IioiKXMucHVzaChpKTtlbHNle3ZhciBhPWkuZ2V0UXVhbGlmaWVkTmFtZSgpLG89ZSYmaS5uYW1lc3BhY2VVUkk9PT1UdC5IVE1MP3Q6cjthPT09byYmcy5wdXNoKGkpfX0pLHN9KX0sZ2V0RWxlbWVudHNCeVRhZ05hbWVOUzpmdW5jdGlvbihyLGUpe3JldHVybiBuZXcgQnQodGhpcyxmdW5jdGlvbih0KXt2YXIgbj1bXTtyZXR1cm4gJG4odCxmdW5jdGlvbihzKXtzIT09dCYmcy5ub2RlVHlwZT09PWJ0JiYocj09PSIqInx8cy5uYW1lc3BhY2VVUkk9PT1yKSYmKGU9PT0iKiJ8fHMubG9jYWxOYW1lPT1lKSYmbi5wdXNoKHMpfSksbn0pfX0sR3QucHJvdG90eXBlLmdldEVsZW1lbnRzQnlDbGFzc05hbWU9UXQucHJvdG90eXBlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUsR3QucHJvdG90eXBlLmdldEVsZW1lbnRzQnlUYWdOYW1lPVF0LnByb3RvdHlwZS5nZXRFbGVtZW50c0J5VGFnTmFtZSxHdC5wcm90b3R5cGUuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUz1RdC5wcm90b3R5cGUuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyxzdChRdCxDZSk7ZnVuY3Rpb24gZHIocil7bnQociksdGhpcy5uYW1lc3BhY2VVUkk9bnVsbCx0aGlzLnByZWZpeD1udWxsLHRoaXMub3duZXJFbGVtZW50PW51bGx9ZHIucHJvdG90eXBlLm5vZGVUeXBlPUZyLHN0KGRyLENlKTtmdW5jdGlvbiBMcihyKXtudChyKX1Mci5wcm90b3R5cGU9e2RhdGE6IiIsc3Vic3RyaW5nRGF0YTpmdW5jdGlvbihyLGUpe3JldHVybiB0aGlzLmRhdGEuc3Vic3RyaW5nKHIscitlKX0sYXBwZW5kRGF0YTpmdW5jdGlvbihyKXtyPXRoaXMuZGF0YStyLHRoaXMubm9kZVZhbHVlPXRoaXMuZGF0YT1yLHRoaXMubGVuZ3RoPXIubGVuZ3RofSxpbnNlcnREYXRhOmZ1bmN0aW9uKHIsZSl7dGhpcy5yZXBsYWNlRGF0YShyLDAsZSl9LGRlbGV0ZURhdGE6ZnVuY3Rpb24ocixlKXt0aGlzLnJlcGxhY2VEYXRhKHIsZSwiIil9LHJlcGxhY2VEYXRhOmZ1bmN0aW9uKHIsZSx0KXt2YXIgbj10aGlzLmRhdGEuc3Vic3RyaW5nKDAscikscz10aGlzLmRhdGEuc3Vic3RyaW5nKHIrZSk7dD1uK3Qrcyx0aGlzLm5vZGVWYWx1ZT10aGlzLmRhdGE9dCx0aGlzLmxlbmd0aD10Lmxlbmd0aH19LHN0KExyLENlKTtmdW5jdGlvbiBtbihyKXtudChyKX1tbi5wcm90b3R5cGU9e25vZGVOYW1lOiIjdGV4dCIsbm9kZVR5cGU6am4sc3BsaXRUZXh0OmZ1bmN0aW9uKHIpe3ZhciBlPXRoaXMuZGF0YSx0PWUuc3Vic3RyaW5nKHIpO2U9ZS5zdWJzdHJpbmcoMCxyKSx0aGlzLmRhdGE9dGhpcy5ub2RlVmFsdWU9ZSx0aGlzLmxlbmd0aD1lLmxlbmd0aDt2YXIgbj10aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodCk7cmV0dXJuIHRoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShuLHRoaXMubmV4dFNpYmxpbmcpLG59fSxzdChtbixMcik7ZnVuY3Rpb24gdHMocil7bnQocil9dHMucHJvdG90eXBlPXtub2RlTmFtZToiI2NvbW1lbnQiLG5vZGVUeXBlOmdpfSxzdCh0cyxMcik7ZnVuY3Rpb24gcnMocil7bnQocil9cnMucHJvdG90eXBlPXtub2RlTmFtZToiI2NkYXRhLXNlY3Rpb24iLG5vZGVUeXBlOk9vfSxzdChycyxtbik7ZnVuY3Rpb24gbnMocil7bnQocil9bnMucHJvdG90eXBlLm5vZGVUeXBlPVBvLHN0KG5zLENlKTtmdW5jdGlvbiBtaShyKXtudChyKX1taS5wcm90b3R5cGUubm9kZVR5cGU9RGYsc3QobWksQ2UpO2Z1bmN0aW9uIGJpKHIpe250KHIpfWJpLnByb3RvdHlwZS5ub2RlVHlwZT13ZixzdChiaSxDZSk7ZnVuY3Rpb24gc3Mocil7bnQocil9c3MucHJvdG90eXBlLm5vZGVUeXBlPUxvLHN0KHNzLENlKTtmdW5jdGlvbiBQcihyKXtudChyKX1Qci5wcm90b3R5cGUubm9kZU5hbWU9IiNkb2N1bWVudC1mcmFnbWVudCIsUHIucHJvdG90eXBlLm5vZGVUeXBlPWVyLHN0KFByLENlKTtmdW5jdGlvbiBpcyhyKXtudChyKX1pcy5wcm90b3R5cGUubm9kZVR5cGU9cGksc3QoaXMsTHIpO2Z1bmN0aW9uIFhvKCl7fVhvLnByb3RvdHlwZS5zZXJpYWxpemVUb1N0cmluZz1mdW5jdGlvbihyLGUpe3JldHVybiAkby5jYWxsKHIsZSl9LENlLnByb3RvdHlwZS50b1N0cmluZz0kbztmdW5jdGlvbiAkbyhyKXt2YXIgZTt0eXBlb2Ygcj09ImZ1bmN0aW9uIj9lPXtyZXF1aXJlV2VsbEZvcm1lZDohMSxzcGxpdENEQVRBU2VjdGlvbnM6ITAsbm9kZUZpbHRlcjpyfTpyIT1udWxsP2U9e3JlcXVpcmVXZWxsRm9ybWVkOiEhci5yZXF1aXJlV2VsbEZvcm1lZCxzcGxpdENEQVRBU2VjdGlvbnM6ci5zcGxpdENEQVRBU2VjdGlvbnMhPT0hMSxub2RlRmlsdGVyOnIubm9kZUZpbHRlcnx8bnVsbH06ZT17cmVxdWlyZVdlbGxGb3JtZWQ6ITEsc3BsaXRDREFUQVNlY3Rpb25zOiEwLG5vZGVGaWx0ZXI6bnVsbH07dmFyIHQ9W10sbj10aGlzLm5vZGVUeXBlPT09TXImJnRoaXMuZG9jdW1lbnRFbGVtZW50fHx0aGlzLHM9bi5wcmVmaXgsaT1uLm5hbWVzcGFjZVVSSTtpZihpJiZzPT1udWxsKXt2YXIgcz1uLmxvb2t1cFByZWZpeChpKTtpZihzPT1udWxsKXZhciBhPVt7bmFtZXNwYWNlOmkscHJlZml4Om51bGx9XX1yZXR1cm4gQ2kodGhpcyx0LGEsZSksdC5qb2luKCIiKX1mdW5jdGlvbiBldShyLGUsdCl7dmFyIG49ci5wcmVmaXh8fCIiLHM9ci5uYW1lc3BhY2VVUkk7aWYoIXN8fG49PT0ieG1sIiYmcz09PVR0LlhNTHx8cz09PVR0LlhNTE5TKXJldHVybiExO2Zvcih2YXIgaT10Lmxlbmd0aDtpLS07KXt2YXIgYT10W2ldO2lmKGEucHJlZml4PT09bilyZXR1cm4gYS5uYW1lc3BhY2UhPT1zfXJldHVybiEwfWZ1bmN0aW9uIGFzKHIsZSx0KXtyLnB1c2goIiAiLGUsJz0iJyx0LnJlcGxhY2UoL1s8PiYiXHRcblxyXS9nLEtvKSwnIicpfWZ1bmN0aW9uIENpKHIsZSx0LG4pe3R8fCh0PVtdKTt2YXIgcz1uLm5vZGVGaWx0ZXIsaT1uLnJlcXVpcmVXZWxsRm9ybWVkLGE9bi5zcGxpdENEQVRBU2VjdGlvbnMsbz1yLm5vZGVUeXBlPT09TXI/cjpyLm93bmVyRG9jdW1lbnQsdT1vLnR5cGU9PT0iaHRtbCI7SmUocix7bnM6dH0se2VudGVyOmZ1bmN0aW9uKGwsQSl7dmFyIGQ9QS5ucztpZihzKWlmKGw9cyhsKSxsKXtpZih0eXBlb2YgbD09InN0cmluZyIpcmV0dXJuIGUucHVzaChsKSxudWxsfWVsc2UgcmV0dXJuIG51bGw7c3dpdGNoKGwubm9kZVR5cGUpe2Nhc2UgYnQ6dmFyIGc9bC5hdHRyaWJ1dGVzLGY9Zy5sZW5ndGgsQz1sLnRhZ05hbWUscD1DO2lmKCF1JiYhbC5wcmVmaXgmJmwubmFtZXNwYWNlVVJJKXtmb3IodmFyIGIsbT0wO208Zy5sZW5ndGg7bSsrKWlmKGcuaXRlbShtKS5uYW1lPT09InhtbG5zIil7Yj1nLml0ZW0obSkudmFsdWU7YnJlYWt9aWYoIWIpZm9yKHZhciBFPWQubGVuZ3RoLTE7RT49MDtFLS0pe3ZhciB3PWRbRV07aWYody5wcmVmaXg9PT0iIiYmdy5uYW1lc3BhY2U9PT1sLm5hbWVzcGFjZVVSSSl7Yj13Lm5hbWVzcGFjZTticmVha319aWYoYiE9PWwubmFtZXNwYWNlVVJJKWZvcih2YXIgRT1kLmxlbmd0aC0xO0U+PTA7RS0tKXt2YXIgdz1kW0VdO2lmKHcubmFtZXNwYWNlPT09bC5uYW1lc3BhY2VVUkkpe3cucHJlZml4JiYocD13LnByZWZpeCsiOiIrQyk7YnJlYWt9fX1lLnB1c2goIjwiLHApO2Zvcih2YXIgTj1kLnNsaWNlKCksST0wO0k8ZjtJKyspe3ZhciBSPWcuaXRlbShJKTtSLnByZWZpeD09InhtbG5zIj9OLnB1c2goe3ByZWZpeDpSLmxvY2FsTmFtZSxuYW1lc3BhY2U6Ui52YWx1ZX0pOlIubm9kZU5hbWU9PSJ4bWxucyImJk4ucHVzaCh7cHJlZml4OiIiLG5hbWVzcGFjZTpSLnZhbHVlfSl9Zm9yKHZhciBJPTA7STxmO0krKyl7dmFyIFI9Zy5pdGVtKEkpO2lmKGV1KFIsdSxOKSl7dmFyIE09Ui5wcmVmaXh8fCIiLFc9Ui5uYW1lc3BhY2VVUkk7YXMoZSxNPyJ4bWxuczoiK006InhtbG5zIixXKSxOLnB1c2goe3ByZWZpeDpNLG5hbWVzcGFjZTpXfSl9dmFyIE89cz9zKFIpOlI7TyYmKHR5cGVvZiBPPT0ic3RyaW5nIj9lLnB1c2goTyk6YXMoZSxPLm5hbWUsTy52YWx1ZSkpfWlmKEM9PT1wJiZldShsLHUsTikpe3ZhciBWPWwucHJlZml4fHwiIixXPWwubmFtZXNwYWNlVVJJO2FzKGUsVj8ieG1sbnM6IitWOiJ4bWxucyIsVyksTi5wdXNoKHtwcmVmaXg6VixuYW1lc3BhY2U6V30pfXZhciBYPSFsLmZpcnN0Q2hpbGQ7aWYoWCYmKHV8fGwubmFtZXNwYWNlVVJJPT09VHQuSFRNTCkmJihYPUNmKEMpKSxYKXJldHVybiBlLnB1c2goIi8+IiksbnVsbDtpZihlLnB1c2goIj4iKSx1JiZiZihDKSl7Zm9yKHZhciB2PWwuZmlyc3RDaGlsZDt2Oyl2LmRhdGE/ZS5wdXNoKHYuZGF0YSk6Q2kodixlLE4uc2xpY2UoKSxuKSx2PXYubmV4dFNpYmxpbmc7cmV0dXJuIGUucHVzaCgiPC8iLHAsIj4iKSxudWxsfXJldHVybntuczpOLHRhZzpwfTtjYXNlIE1yOmNhc2UgZXI6aWYoaSYmbC5ub2RlVHlwZT09PU1yJiZsLmRvY3VtZW50RWxlbWVudD09bnVsbCl0aHJvdyBuZXcgbmUoIlRoZSBEb2N1bWVudCBoYXMgbm8gZG9jdW1lbnRFbGVtZW50IixtdC5JbnZhbGlkU3RhdGVFcnJvcik7cmV0dXJue25zOmR9O2Nhc2UgRnI6cmV0dXJuIGFzKGUsbC5uYW1lLGwudmFsdWUpLG51bGw7Y2FzZSBqbjppZihpJiZ6ZS5JbnZhbGlkQ2hhci50ZXN0KGwuZGF0YSkpdGhyb3cgbmV3IG5lKCJUaGUgVGV4dCBub2RlIGRhdGEgY29udGFpbnMgY2hhcmFjdGVycyBvdXRzaWRlIHRoZSBYTUwgQ2hhciBwcm9kdWN0aW9uIixtdC5JbnZhbGlkU3RhdGVFcnJvcik7cmV0dXJuIGUucHVzaChsLmRhdGEucmVwbGFjZSgvWzwmPl0vZyxLbykpLG51bGw7Y2FzZSBPbzppZihpJiZsLmRhdGEuaW5kZXhPZigiXV0+IikhPT0tMSl0aHJvdyBuZXcgbmUoJ1RoZSBDREFUQVNlY3Rpb24gZGF0YSBjb250YWlucyAiXV0+IicsbXQuSW52YWxpZFN0YXRlRXJyb3IpO3JldHVybiBhP2UucHVzaCh6ZS5DREFUQV9TVEFSVCxsLmRhdGEucmVwbGFjZSgvXV0+L2csIl1dXV0+PCFbQ0RBVEFbPiIpLHplLkNEQVRBX0VORCk6ZS5wdXNoKHplLkNEQVRBX1NUQVJULGwuZGF0YSx6ZS5DREFUQV9FTkQpLG51bGw7Y2FzZSBnaTppZihpKXtpZih6ZS5JbnZhbGlkQ2hhci50ZXN0KGwuZGF0YSkpdGhyb3cgbmV3IG5lKCJUaGUgY29tbWVudCBub2RlIGRhdGEgY29udGFpbnMgY2hhcmFjdGVycyBvdXRzaWRlIHRoZSBYTUwgQ2hhciBwcm9kdWN0aW9uIixtdC5JbnZhbGlkU3RhdGVFcnJvcik7aWYobC5kYXRhLmluZGV4T2YoIi0tIikhPT0tMXx8bC5kYXRhW2wuZGF0YS5sZW5ndGgtMV09PT0iLSIpdGhyb3cgbmV3IG5lKCdUaGUgY29tbWVudCBub2RlIGRhdGEgY29udGFpbnMgIi0tIiBvciBlbmRzIHdpdGggIi0iJyxtdC5JbnZhbGlkU3RhdGVFcnJvcil9cmV0dXJuIGUucHVzaCh6ZS5DT01NRU5UX1NUQVJULGwuZGF0YSx6ZS5DT01NRU5UX0VORCksbnVsbDtjYXNlIFBvOnZhciBQPWwucHVibGljSWQsaD1sLnN5c3RlbUlkO2lmKGkpe2lmKFAmJiF6ZS5QdWJpZExpdGVyYWxfbWF0Y2gudGVzdChQKSl0aHJvdyBuZXcgbmUoIkRvY3VtZW50VHlwZSBwdWJsaWNJZCBpcyBub3QgYSB2YWxpZCBQdWJpZExpdGVyYWwiLG10LkludmFsaWRTdGF0ZUVycm9yKTtpZihoJiZoIT09Ii4iJiYhemUuU3lzdGVtTGl0ZXJhbF9tYXRjaC50ZXN0KGgpKXRocm93IG5ldyBuZSgiRG9jdW1lbnRUeXBlIHN5c3RlbUlkIGlzIG5vdCBhIHZhbGlkIFN5c3RlbUxpdGVyYWwiLG10LkludmFsaWRTdGF0ZUVycm9yKTtpZihsLmludGVybmFsU3Vic2V0JiZsLmludGVybmFsU3Vic2V0LmluZGV4T2YoIl0+IikhPT0tMSl0aHJvdyBuZXcgbmUoJ0RvY3VtZW50VHlwZSBpbnRlcm5hbFN1YnNldCBjb250YWlucyAiXT4iJyxtdC5JbnZhbGlkU3RhdGVFcnJvcil9cmV0dXJuIGUucHVzaCh6ZS5ET0NUWVBFX0RFQ0xfU1RBUlQsIiAiLGwubmFtZSksUD8oZS5wdXNoKCIgIix6ZS5QVUJMSUMsIiAiLFApLGgmJmghPT0iLiImJmUucHVzaCgiICIsaCkpOmgmJmghPT0iLiImJmUucHVzaCgiICIsemUuU1lTVEVNLCIgIixoKSxsLmludGVybmFsU3Vic2V0JiZlLnB1c2goIiBbIixsLmludGVybmFsU3Vic2V0LCJdIiksZS5wdXNoKCI+IiksbnVsbDtjYXNlIHBpOmlmKGkpe2lmKGwudGFyZ2V0LmluZGV4T2YoIjoiKSE9PS0xfHxsLnRhcmdldC50b0xvd2VyQ2FzZSgpPT09InhtbCIpdGhyb3cgbmV3IG5lKCJUaGUgUHJvY2Vzc2luZ0luc3RydWN0aW9uIHRhcmdldCBpcyBub3Qgd2VsbC1mb3JtZWQiLG10LkludmFsaWRTdGF0ZUVycm9yKTtpZih6ZS5JbnZhbGlkQ2hhci50ZXN0KGwuZGF0YSkpdGhyb3cgbmV3IG5lKCJUaGUgUHJvY2Vzc2luZ0luc3RydWN0aW9uIGRhdGEgY29udGFpbnMgY2hhcmFjdGVycyBvdXRzaWRlIHRoZSBYTUwgQ2hhciBwcm9kdWN0aW9uIixtdC5JbnZhbGlkU3RhdGVFcnJvcik7aWYobC5kYXRhLmluZGV4T2YoIj8+IikhPT0tMSl0aHJvdyBuZXcgbmUoJ1RoZSBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gZGF0YSBjb250YWlucyAiPz4iJyxtdC5JbnZhbGlkU3RhdGVFcnJvcil9cmV0dXJuIGUucHVzaCgiPD8iLGwudGFyZ2V0LCIgIixsLmRhdGEsIj8+IiksbnVsbDtjYXNlIExvOnJldHVybiBlLnB1c2goIiYiLGwubm9kZU5hbWUsIjsiKSxudWxsO2RlZmF1bHQ6cmV0dXJuIGUucHVzaCgiPz8iLGwubm9kZU5hbWUpLG51bGx9fSxleGl0OmZ1bmN0aW9uKGwsQSl7QSYmQS50YWcmJmUucHVzaCgiPC8iLEEudGFnLCI+Iil9fSl9ZnVuY3Rpb24gX2YocixlLHQpe3ZhciBuO3JldHVybiBKZShlLG51bGwse2VudGVyOmZ1bmN0aW9uKHMsaSl7dmFyIGE9cy5jbG9uZU5vZGUoITEpO2Eub3duZXJEb2N1bWVudD1yLGEucGFyZW50Tm9kZT1udWxsLGk9PT1udWxsP249YTppLmFwcGVuZENoaWxkKGEpO3ZhciBvPXMubm9kZVR5cGU9PT1Gcnx8dDtyZXR1cm4gbz9hOm51bGx9fSksbn1mdW5jdGlvbiB0dShyLGUsdCl7dmFyIG47cmV0dXJuIEplKGUsbnVsbCx7ZW50ZXI6ZnVuY3Rpb24ocyxpKXt2YXIgYT1uZXcgcy5jb25zdHJ1Y3RvcihldCk7Zm9yKHZhciBvIGluIHMpaWYoX3IocyxvKSl7dmFyIHU9c1tvXTt0eXBlb2YgdSE9Im9iamVjdCImJnUhPWFbb10mJihhW29dPXUpfXMuY2hpbGROb2RlcyYmKGEuY2hpbGROb2Rlcz1uZXcgUWUpLGEub3duZXJEb2N1bWVudD1yO3ZhciBsPXQ7c3dpdGNoKGEubm9kZVR5cGUpe2Nhc2UgYnQ6dmFyIEE9cy5hdHRyaWJ1dGVzLGQ9YS5hdHRyaWJ1dGVzPW5ldyBPcixnPUEubGVuZ3RoO2QuX293bmVyRWxlbWVudD1hO2Zvcih2YXIgZj0wO2Y8ZztmKyspYS5zZXRBdHRyaWJ1dGVOb2RlKHR1KHIsQS5pdGVtKGYpLCEwKSk7YnJlYWs7Y2FzZSBGcjpsPSEwfXJldHVybiBpIT09bnVsbD9pLmFwcGVuZENoaWxkKGEpOm49YSxsP2E6bnVsbH19KSxufWZ1bmN0aW9uIHJ1KHIsZSx0KXtyW2VdPXR9ZnVuY3Rpb24gU2kocil7Zm9yKHZhciBlPVtdLHQ9ci5maXJzdENoaWxkO3Q7KXQubm9kZVR5cGU9PT1idCYmZS5wdXNoKHQpLHQ9dC5uZXh0U2libGluZztyZXR1cm4gZX10cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5JiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KEJ0LnByb3RvdHlwZSwibGVuZ3RoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFhuKHRoaXMpLHRoaXMuJCRsZW5ndGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KENlLnByb3RvdHlwZSwidGV4dENvbnRlbnQiLHtnZXQ6ZnVuY3Rpb24oKXtpZih0aGlzLm5vZGVUeXBlPT09YnR8fHRoaXMubm9kZVR5cGU9PT1lcil7dmFyIHI9W107cmV0dXJuIEplKHRoaXMsbnVsbCx7ZW50ZXI6ZnVuY3Rpb24oZSl7aWYoZS5ub2RlVHlwZT09PWJ0fHxlLm5vZGVUeXBlPT09ZXIpcmV0dXJuITA7aWYoZS5ub2RlVHlwZT09PXBpfHxlLm5vZGVUeXBlPT09Z2kpcmV0dXJuIG51bGw7ci5wdXNoKGUubm9kZVZhbHVlKX19KSxyLmpvaW4oIiIpfXJldHVybiB0aGlzLm5vZGVWYWx1ZX0sc2V0OmZ1bmN0aW9uKHIpe3N3aXRjaCh0aGlzLm5vZGVUeXBlKXtjYXNlIGJ0OmNhc2UgZXI6Zm9yKDt0aGlzLmZpcnN0Q2hpbGQ7KXRoaXMucmVtb3ZlQ2hpbGQodGhpcy5maXJzdENoaWxkKTsocnx8U3RyaW5nKHIpKSYmdGhpcy5hcHBlbmRDaGlsZCh0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocikpO2JyZWFrO2RlZmF1bHQ6dGhpcy5kYXRhPXIsdGhpcy52YWx1ZT1yLHRoaXMubm9kZVZhbHVlPXJ9fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdC5wcm90b3R5cGUsImNoaWxkcmVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBCdCh0aGlzLFNpKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoR3QucHJvdG90eXBlLCJjaGlsZHJlbiIse2dldDpmdW5jdGlvbigpe3JldHVybiBuZXcgQnQodGhpcyxTaSl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFByLnByb3RvdHlwZSwiY2hpbGRyZW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEJ0KHRoaXMsU2kpfX0pLHJ1PWZ1bmN0aW9uKHIsZSx0KXtyWyIkJCIrZV09dH0pfWNhdGNoe31UZS5fdXBkYXRlTGl2ZUxpc3Q9WG4sVGUuQXR0cj1kcixUZS5DREFUQVNlY3Rpb249cnMsVGUuQ2hhcmFjdGVyRGF0YT1McixUZS5Db21tZW50PXRzLFRlLkRvY3VtZW50PUd0LFRlLkRvY3VtZW50RnJhZ21lbnQ9UHIsVGUuRG9jdW1lbnRUeXBlPW5zLFRlLkRPTUltcGxlbWVudGF0aW9uPVdvLFRlLkVsZW1lbnQ9UXQsVGUuRW50aXR5PWJpLFRlLkVudGl0eVJlZmVyZW5jZT1zcyxUZS5MaXZlTm9kZUxpc3Q9QnQsVGUuTmFtZWROb2RlTWFwPU9yLFRlLk5vZGU9Q2UsVGUuTm9kZUxpc3Q9UWUsVGUuTm90YXRpb249bWksVGUuVGV4dD1tbixUZS5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb249aXMsVGUud2Fsa0RPTT1KZSxUZS5YTUxTZXJpYWxpemVyPVhvO3ZhciBVcj17fSxudT17fTsoZnVuY3Rpb24ocil7dmFyIGU9UmUuZnJlZXplO3IuWE1MX0VOVElUSUVTPWUoe2FtcDoiJiIsYXBvczoiJyIsZ3Q6Ij4iLGx0OiI8IixxdW90OiciJ30pLHIuSFRNTF9FTlRJVElFUz1lKHtBYWN1dGU6IsOBIixhYWN1dGU6IsOhIixBYnJldmU6IsSCIixhYnJldmU6IsSDIixhYzoi4oi+IixhY2Q6IuKIvyIsYWNFOiLiiL7MsyIsQWNpcmM6IsOCIixhY2lyYzoiw6IiLGFjdXRlOiLCtCIsQWN5OiLQkCIsYWN5OiLQsCIsQUVsaWc6IsOGIixhZWxpZzoiw6YiLGFmOiLigaEiLEFmcjoi8J2UhCIsYWZyOiLwnZSeIixBZ3JhdmU6IsOAIixhZ3JhdmU6IsOgIixhbGVmc3ltOiLihLUiLGFsZXBoOiLihLUiLEFscGhhOiLOkSIsYWxwaGE6Is6xIixBbWFjcjoixIAiLGFtYWNyOiLEgSIsYW1hbGc6IuKovyIsQU1QOiImIixhbXA6IiYiLEFuZDoi4qmTIixhbmQ6IuKIpyIsYW5kYW5kOiLiqZUiLGFuZGQ6IuKpnCIsYW5kc2xvcGU6IuKpmCIsYW5kdjoi4qmaIixhbmc6IuKIoCIsYW5nZToi4qakIixhbmdsZToi4oigIixhbmdtc2Q6IuKIoSIsYW5nbXNkYWE6IuKmqCIsYW5nbXNkYWI6IuKmqSIsYW5nbXNkYWM6IuKmqiIsYW5nbXNkYWQ6IuKmqyIsYW5nbXNkYWU6IuKmrCIsYW5nbXNkYWY6IuKmrSIsYW5nbXNkYWc6IuKmriIsYW5nbXNkYWg6IuKmryIsYW5ncnQ6IuKInyIsYW5ncnR2Yjoi4oq+IixhbmdydHZiZDoi4qadIixhbmdzcGg6IuKIoiIsYW5nc3Q6IsOFIixhbmd6YXJyOiLijbwiLEFvZ29uOiLEhCIsYW9nb246IsSFIixBb3BmOiLwnZS4Iixhb3BmOiLwnZWSIixhcDoi4omIIixhcGFjaXI6IuKpryIsYXBFOiLiqbAiLGFwZToi4omKIixhcGlkOiLiiYsiLGFwb3M6IiciLEFwcGx5RnVuY3Rpb246IuKBoSIsYXBwcm94OiLiiYgiLGFwcHJveGVxOiLiiYoiLEFyaW5nOiLDhSIsYXJpbmc6IsOlIixBc2NyOiLwnZKcIixhc2NyOiLwnZK2IixBc3NpZ246IuKJlCIsYXN0OiIqIixhc3ltcDoi4omIIixhc3ltcGVxOiLiiY0iLEF0aWxkZToiw4MiLGF0aWxkZToiw6MiLEF1bWw6IsOEIixhdW1sOiLDpCIsYXdjb25pbnQ6IuKIsyIsYXdpbnQ6IuKokSIsYmFja2Nvbmc6IuKJjCIsYmFja2Vwc2lsb246Is+2IixiYWNrcHJpbWU6IuKAtSIsYmFja3NpbToi4oi9IixiYWNrc2ltZXE6IuKLjSIsQmFja3NsYXNoOiLiiJYiLEJhcnY6IuKrpyIsYmFydmVlOiLiir0iLEJhcndlZDoi4oyGIixiYXJ3ZWQ6IuKMhSIsYmFyd2VkZ2U6IuKMhSIsYmJyazoi4o61IixiYnJrdGJyazoi4o62IixiY29uZzoi4omMIixCY3k6ItCRIixiY3k6ItCxIixiZHF1bzoi4oCeIixiZWNhdXM6IuKItSIsQmVjYXVzZToi4oi1IixiZWNhdXNlOiLiiLUiLGJlbXB0eXY6IuKmsCIsYmVwc2k6Is+2IixiZXJub3U6IuKErCIsQmVybm91bGxpczoi4oSsIixCZXRhOiLOkiIsYmV0YToizrIiLGJldGg6IuKEtiIsYmV0d2Vlbjoi4omsIixCZnI6IvCdlIUiLGJmcjoi8J2UnyIsYmlnY2FwOiLii4IiLGJpZ2NpcmM6IuKXryIsYmlnY3VwOiLii4MiLGJpZ29kb3Q6IuKogCIsYmlnb3BsdXM6IuKogSIsYmlnb3RpbWVzOiLiqIIiLGJpZ3NxY3VwOiLiqIYiLGJpZ3N0YXI6IuKYhSIsYmlndHJpYW5nbGVkb3duOiLilr0iLGJpZ3RyaWFuZ2xldXA6IuKWsyIsYmlndXBsdXM6IuKohCIsYmlndmVlOiLii4EiLGJpZ3dlZGdlOiLii4AiLGJrYXJvdzoi4qSNIixibGFja2xvemVuZ2U6IuKnqyIsYmxhY2tzcXVhcmU6IuKWqiIsYmxhY2t0cmlhbmdsZToi4pa0IixibGFja3RyaWFuZ2xlZG93bjoi4pa+IixibGFja3RyaWFuZ2xlbGVmdDoi4peCIixibGFja3RyaWFuZ2xlcmlnaHQ6IuKWuCIsYmxhbms6IuKQoyIsYmxrMTI6IuKWkiIsYmxrMTQ6IuKWkSIsYmxrMzQ6IuKWkyIsYmxvY2s6IuKWiCIsYm5lOiI94oOlIixibmVxdWl2OiLiiaHig6UiLGJOb3Q6IuKrrSIsYm5vdDoi4oyQIixCb3BmOiLwnZS5Iixib3BmOiLwnZWTIixib3Q6IuKKpSIsYm90dG9tOiLiiqUiLGJvd3RpZToi4ouIIixib3hib3g6IuKniSIsYm94REw6IuKVlyIsYm94RGw6IuKVliIsYm94ZEw6IuKVlSIsYm94ZGw6IuKUkCIsYm94RFI6IuKVlCIsYm94RHI6IuKVkyIsYm94ZFI6IuKVkiIsYm94ZHI6IuKUjCIsYm94SDoi4pWQIixib3hoOiLilIAiLGJveEhEOiLilaYiLGJveEhkOiLilaQiLGJveGhEOiLilaUiLGJveGhkOiLilKwiLGJveEhVOiLilakiLGJveEh1OiLilaciLGJveGhVOiLilagiLGJveGh1OiLilLQiLGJveG1pbnVzOiLiip8iLGJveHBsdXM6IuKKniIsYm94dGltZXM6IuKKoCIsYm94VUw6IuKVnSIsYm94VWw6IuKVnCIsYm94dUw6IuKVmyIsYm94dWw6IuKUmCIsYm94VVI6IuKVmiIsYm94VXI6IuKVmSIsYm94dVI6IuKVmCIsYm94dXI6IuKUlCIsYm94Vjoi4pWRIixib3h2OiLilIIiLGJveFZIOiLilawiLGJveFZoOiLilasiLGJveHZIOiLilaoiLGJveHZoOiLilLwiLGJveFZMOiLilaMiLGJveFZsOiLilaIiLGJveHZMOiLilaEiLGJveHZsOiLilKQiLGJveFZSOiLilaAiLGJveFZyOiLilZ8iLGJveHZSOiLilZ4iLGJveHZyOiLilJwiLGJwcmltZToi4oC1IixCcmV2ZToiy5giLGJyZXZlOiLLmCIsYnJ2YmFyOiLCpiIsQnNjcjoi4oSsIixic2NyOiLwnZK3Iixic2VtaToi4oGPIixic2ltOiLiiL0iLGJzaW1lOiLii40iLGJzb2w6IlxcIixic29sYjoi4qeFIixic29saHN1Yjoi4p+IIixidWxsOiLigKIiLGJ1bGxldDoi4oCiIixidW1wOiLiiY4iLGJ1bXBFOiLiqq4iLGJ1bXBlOiLiiY8iLEJ1bXBlcToi4omOIixidW1wZXE6IuKJjyIsQ2FjdXRlOiLEhiIsY2FjdXRlOiLEhyIsQ2FwOiLii5IiLGNhcDoi4oipIixjYXBhbmQ6IuKphCIsY2FwYnJjdXA6IuKpiSIsY2FwY2FwOiLiqYsiLGNhcGN1cDoi4qmHIixjYXBkb3Q6IuKpgCIsQ2FwaXRhbERpZmZlcmVudGlhbEQ6IuKFhSIsY2Fwczoi4oip77iAIixjYXJldDoi4oGBIixjYXJvbjoiy4ciLENheWxleXM6IuKErSIsY2NhcHM6IuKpjSIsQ2Nhcm9uOiLEjCIsY2Nhcm9uOiLEjSIsQ2NlZGlsOiLDhyIsY2NlZGlsOiLDpyIsQ2NpcmM6IsSIIixjY2lyYzoixIkiLENjb25pbnQ6IuKIsCIsY2N1cHM6IuKpjCIsY2N1cHNzbToi4qmQIixDZG90OiLEiiIsY2RvdDoixIsiLGNlZGlsOiLCuCIsQ2VkaWxsYToiwrgiLGNlbXB0eXY6IuKmsiIsY2VudDoiwqIiLENlbnRlckRvdDoiwrciLGNlbnRlcmRvdDoiwrciLENmcjoi4oStIixjZnI6IvCdlKAiLENIY3k6ItCnIixjaGN5OiLRhyIsY2hlY2s6IuKckyIsY2hlY2ttYXJrOiLinJMiLENoaToizqciLGNoaToiz4ciLGNpcjoi4peLIixjaXJjOiLLhiIsY2lyY2VxOiLiiZciLGNpcmNsZWFycm93bGVmdDoi4oa6IixjaXJjbGVhcnJvd3JpZ2h0OiLihrsiLGNpcmNsZWRhc3Q6IuKKmyIsY2lyY2xlZGNpcmM6IuKKmiIsY2lyY2xlZGRhc2g6IuKKnSIsQ2lyY2xlRG90OiLiipkiLGNpcmNsZWRSOiLCriIsY2lyY2xlZFM6IuKTiCIsQ2lyY2xlTWludXM6IuKKliIsQ2lyY2xlUGx1czoi4oqVIixDaXJjbGVUaW1lczoi4oqXIixjaXJFOiLip4MiLGNpcmU6IuKJlyIsY2lyZm5pbnQ6IuKokCIsY2lybWlkOiLiq68iLGNpcnNjaXI6IuKngiIsQ2xvY2t3aXNlQ29udG91ckludGVncmFsOiLiiLIiLENsb3NlQ3VybHlEb3VibGVRdW90ZToi4oCdIixDbG9zZUN1cmx5UXVvdGU6IuKAmSIsY2x1YnM6IuKZoyIsY2x1YnN1aXQ6IuKZoyIsQ29sb246IuKItyIsY29sb246IjoiLENvbG9uZToi4qm0Iixjb2xvbmU6IuKJlCIsY29sb25lcToi4omUIixjb21tYToiLCIsY29tbWF0OiJAIixjb21wOiLiiIEiLGNvbXBmbjoi4oiYIixjb21wbGVtZW50OiLiiIEiLGNvbXBsZXhlczoi4oSCIixjb25nOiLiiYUiLGNvbmdkb3Q6IuKprSIsQ29uZ3J1ZW50OiLiiaEiLENvbmludDoi4oivIixjb25pbnQ6IuKIriIsQ29udG91ckludGVncmFsOiLiiK4iLENvcGY6IuKEgiIsY29wZjoi8J2VlCIsY29wcm9kOiLiiJAiLENvcHJvZHVjdDoi4oiQIixDT1BZOiLCqSIsY29weToiwqkiLGNvcHlzcjoi4oSXIixDb3VudGVyQ2xvY2t3aXNlQ29udG91ckludGVncmFsOiLiiLMiLGNyYXJyOiLihrUiLENyb3NzOiLiqK8iLGNyb3NzOiLinJciLENzY3I6IvCdkp4iLGNzY3I6IvCdkrgiLGNzdWI6IuKrjyIsY3N1YmU6IuKrkSIsY3N1cDoi4quQIixjc3VwZToi4quSIixjdGRvdDoi4ouvIixjdWRhcnJsOiLipLgiLGN1ZGFycnI6IuKktSIsY3VlcHI6IuKLniIsY3Vlc2M6IuKLnyIsY3VsYXJyOiLihrYiLGN1bGFycnA6IuKkvSIsQ3VwOiLii5MiLGN1cDoi4oiqIixjdXBicmNhcDoi4qmIIixDdXBDYXA6IuKJjSIsY3VwY2FwOiLiqYYiLGN1cGN1cDoi4qmKIixjdXBkb3Q6IuKKjSIsY3Vwb3I6IuKphSIsY3Vwczoi4oiq77iAIixjdXJhcnI6IuKGtyIsY3VyYXJybToi4qS8IixjdXJseWVxcHJlYzoi4oueIixjdXJseWVxc3VjYzoi4oufIixjdXJseXZlZToi4ouOIixjdXJseXdlZGdlOiLii48iLGN1cnJlbjoiwqQiLGN1cnZlYXJyb3dsZWZ0OiLihrYiLGN1cnZlYXJyb3dyaWdodDoi4oa3IixjdXZlZToi4ouOIixjdXdlZDoi4ouPIixjd2NvbmludDoi4oiyIixjd2ludDoi4oixIixjeWxjdHk6IuKMrSIsRGFnZ2VyOiLigKEiLGRhZ2dlcjoi4oCgIixkYWxldGg6IuKEuCIsRGFycjoi4oahIixkQXJyOiLih5MiLGRhcnI6IuKGkyIsZGFzaDoi4oCQIixEYXNodjoi4qukIixkYXNodjoi4oqjIixkYmthcm93OiLipI8iLGRibGFjOiLLnSIsRGNhcm9uOiLEjiIsZGNhcm9uOiLEjyIsRGN5OiLQlCIsZGN5OiLQtCIsREQ6IuKFhSIsZGQ6IuKFhiIsZGRhZ2dlcjoi4oChIixkZGFycjoi4oeKIixERG90cmFoZDoi4qSRIixkZG90c2VxOiLiqbciLGRlZzoiwrAiLERlbDoi4oiHIixEZWx0YToizpQiLGRlbHRhOiLOtCIsZGVtcHR5djoi4qaxIixkZmlzaHQ6IuKlvyIsRGZyOiLwnZSHIixkZnI6IvCdlKEiLGRIYXI6IuKlpSIsZGhhcmw6IuKHgyIsZGhhcnI6IuKHgiIsRGlhY3JpdGljYWxBY3V0ZToiwrQiLERpYWNyaXRpY2FsRG90OiLLmSIsRGlhY3JpdGljYWxEb3VibGVBY3V0ZToiy50iLERpYWNyaXRpY2FsR3JhdmU6ImAiLERpYWNyaXRpY2FsVGlsZGU6IsucIixkaWFtOiLii4QiLERpYW1vbmQ6IuKLhCIsZGlhbW9uZDoi4ouEIixkaWFtb25kc3VpdDoi4pmmIixkaWFtczoi4pmmIixkaWU6IsKoIixEaWZmZXJlbnRpYWxEOiLihYYiLGRpZ2FtbWE6Is+dIixkaXNpbjoi4ouyIixkaXY6IsO3IixkaXZpZGU6IsO3IixkaXZpZGVvbnRpbWVzOiLii4ciLGRpdm9ueDoi4ouHIixESmN5OiLQgiIsZGpjeToi0ZIiLGRsY29ybjoi4oyeIixkbGNyb3A6IuKMjSIsZG9sbGFyOiIkIixEb3BmOiLwnZS7Iixkb3BmOiLwnZWVIixEb3Q6IsKoIixkb3Q6IsuZIixEb3REb3Q6IuKDnCIsZG90ZXE6IuKJkCIsZG90ZXFkb3Q6IuKJkSIsRG90RXF1YWw6IuKJkCIsZG90bWludXM6IuKIuCIsZG90cGx1czoi4oiUIixkb3RzcXVhcmU6IuKKoSIsZG91YmxlYmFyd2VkZ2U6IuKMhiIsRG91YmxlQ29udG91ckludGVncmFsOiLiiK8iLERvdWJsZURvdDoiwqgiLERvdWJsZURvd25BcnJvdzoi4oeTIixEb3VibGVMZWZ0QXJyb3c6IuKHkCIsRG91YmxlTGVmdFJpZ2h0QXJyb3c6IuKHlCIsRG91YmxlTGVmdFRlZToi4qukIixEb3VibGVMb25nTGVmdEFycm93OiLin7giLERvdWJsZUxvbmdMZWZ0UmlnaHRBcnJvdzoi4p+6IixEb3VibGVMb25nUmlnaHRBcnJvdzoi4p+5IixEb3VibGVSaWdodEFycm93OiLih5IiLERvdWJsZVJpZ2h0VGVlOiLiiqgiLERvdWJsZVVwQXJyb3c6IuKHkSIsRG91YmxlVXBEb3duQXJyb3c6IuKHlSIsRG91YmxlVmVydGljYWxCYXI6IuKIpSIsRG93bkFycm93OiLihpMiLERvd25hcnJvdzoi4oeTIixkb3duYXJyb3c6IuKGkyIsRG93bkFycm93QmFyOiLipJMiLERvd25BcnJvd1VwQXJyb3c6IuKHtSIsRG93bkJyZXZlOiLMkSIsZG93bmRvd25hcnJvd3M6IuKHiiIsZG93bmhhcnBvb25sZWZ0OiLih4MiLGRvd25oYXJwb29ucmlnaHQ6IuKHgiIsRG93bkxlZnRSaWdodFZlY3Rvcjoi4qWQIixEb3duTGVmdFRlZVZlY3Rvcjoi4qWeIixEb3duTGVmdFZlY3Rvcjoi4oa9IixEb3duTGVmdFZlY3RvckJhcjoi4qWWIixEb3duUmlnaHRUZWVWZWN0b3I6IuKlnyIsRG93blJpZ2h0VmVjdG9yOiLih4EiLERvd25SaWdodFZlY3RvckJhcjoi4qWXIixEb3duVGVlOiLiiqQiLERvd25UZWVBcnJvdzoi4oanIixkcmJrYXJvdzoi4qSQIixkcmNvcm46IuKMnyIsZHJjcm9wOiLijIwiLERzY3I6IvCdkp8iLGRzY3I6IvCdkrkiLERTY3k6ItCFIixkc2N5OiLRlSIsZHNvbDoi4qe2IixEc3Ryb2s6IsSQIixkc3Ryb2s6IsSRIixkdGRvdDoi4ouxIixkdHJpOiLilr8iLGR0cmlmOiLilr4iLGR1YXJyOiLih7UiLGR1aGFyOiLipa8iLGR3YW5nbGU6IuKmpiIsRFpjeToi0I8iLGR6Y3k6ItGfIixkemlncmFycjoi4p+/IixFYWN1dGU6IsOJIixlYWN1dGU6IsOpIixlYXN0ZXI6IuKpriIsRWNhcm9uOiLEmiIsZWNhcm9uOiLEmyIsZWNpcjoi4omWIixFY2lyYzoiw4oiLGVjaXJjOiLDqiIsZWNvbG9uOiLiiZUiLEVjeToi0K0iLGVjeToi0Y0iLGVERG90OiLiqbciLEVkb3Q6IsSWIixlRG90OiLiiZEiLGVkb3Q6IsSXIixlZToi4oWHIixlZkRvdDoi4omSIixFZnI6IvCdlIgiLGVmcjoi8J2UoiIsZWc6IuKqmiIsRWdyYXZlOiLDiCIsZWdyYXZlOiLDqCIsZWdzOiLiqpYiLGVnc2RvdDoi4qqYIixlbDoi4qqZIixFbGVtZW50OiLiiIgiLGVsaW50ZXJzOiLij6ciLGVsbDoi4oSTIixlbHM6IuKqlSIsZWxzZG90OiLiqpciLEVtYWNyOiLEkiIsZW1hY3I6IsSTIixlbXB0eToi4oiFIixlbXB0eXNldDoi4oiFIixFbXB0eVNtYWxsU3F1YXJlOiLil7siLGVtcHR5djoi4oiFIixFbXB0eVZlcnlTbWFsbFNxdWFyZToi4parIixlbXNwOiLigIMiLGVtc3AxMzoi4oCEIixlbXNwMTQ6IuKAhSIsRU5HOiLFiiIsZW5nOiLFiyIsZW5zcDoi4oCCIixFb2dvbjoixJgiLGVvZ29uOiLEmSIsRW9wZjoi8J2UvCIsZW9wZjoi8J2VliIsZXBhcjoi4ouVIixlcGFyc2w6IuKnoyIsZXBsdXM6IuKpsSIsZXBzaToizrUiLEVwc2lsb246Is6VIixlcHNpbG9uOiLOtSIsZXBzaXY6Is+1IixlcWNpcmM6IuKJliIsZXFjb2xvbjoi4omVIixlcXNpbToi4omCIixlcXNsYW50Z3RyOiLiqpYiLGVxc2xhbnRsZXNzOiLiqpUiLEVxdWFsOiLiqbUiLGVxdWFsczoiPSIsRXF1YWxUaWxkZToi4omCIixlcXVlc3Q6IuKJnyIsRXF1aWxpYnJpdW06IuKHjCIsZXF1aXY6IuKJoSIsZXF1aXZERDoi4qm4IixlcXZwYXJzbDoi4qelIixlcmFycjoi4qWxIixlckRvdDoi4omTIixFc2NyOiLihLAiLGVzY3I6IuKEryIsZXNkb3Q6IuKJkCIsRXNpbToi4qmzIixlc2ltOiLiiYIiLEV0YToizpciLGV0YToizrciLEVUSDoiw5AiLGV0aDoiw7AiLEV1bWw6IsOLIixldW1sOiLDqyIsZXVybzoi4oKsIixleGNsOiIhIixleGlzdDoi4oiDIixFeGlzdHM6IuKIgyIsZXhwZWN0YXRpb246IuKEsCIsRXhwb25lbnRpYWxFOiLihYciLGV4cG9uZW50aWFsZToi4oWHIixmYWxsaW5nZG90c2VxOiLiiZIiLEZjeToi0KQiLGZjeToi0YQiLGZlbWFsZToi4pmAIixmZmlsaWc6Iu+sgyIsZmZsaWc6Iu+sgCIsZmZsbGlnOiLvrIQiLEZmcjoi8J2UiSIsZmZyOiLwnZSjIixmaWxpZzoi76yBIixGaWxsZWRTbWFsbFNxdWFyZToi4pe8IixGaWxsZWRWZXJ5U21hbGxTcXVhcmU6IuKWqiIsZmpsaWc6ImZqIixmbGF0OiLima0iLGZsbGlnOiLvrIIiLGZsdG5zOiLilrEiLGZub2Y6IsaSIixGb3BmOiLwnZS9Iixmb3BmOiLwnZWXIixGb3JBbGw6IuKIgCIsZm9yYWxsOiLiiIAiLGZvcms6IuKLlCIsZm9ya3Y6IuKrmSIsRm91cmllcnRyZjoi4oSxIixmcGFydGludDoi4qiNIixmcmFjMTI6IsK9IixmcmFjMTM6IuKFkyIsZnJhYzE0OiLCvCIsZnJhYzE1OiLihZUiLGZyYWMxNjoi4oWZIixmcmFjMTg6IuKFmyIsZnJhYzIzOiLihZQiLGZyYWMyNToi4oWWIixmcmFjMzQ6IsK+IixmcmFjMzU6IuKFlyIsZnJhYzM4OiLihZwiLGZyYWM0NToi4oWYIixmcmFjNTY6IuKFmiIsZnJhYzU4OiLihZ0iLGZyYWM3ODoi4oWeIixmcmFzbDoi4oGEIixmcm93bjoi4oyiIixGc2NyOiLihLEiLGZzY3I6IvCdkrsiLGdhY3V0ZToix7UiLEdhbW1hOiLOkyIsZ2FtbWE6Is6zIixHYW1tYWQ6Is+cIixnYW1tYWQ6Is+dIixnYXA6IuKqhiIsR2JyZXZlOiLEniIsZ2JyZXZlOiLEnyIsR2NlZGlsOiLEoiIsR2NpcmM6IsScIixnY2lyYzoixJ0iLEdjeToi0JMiLGdjeToi0LMiLEdkb3Q6IsSgIixnZG90OiLEoSIsZ0U6IuKJpyIsZ2U6IuKJpSIsZ0VsOiLiqowiLGdlbDoi4oubIixnZXE6IuKJpSIsZ2VxcToi4omnIixnZXFzbGFudDoi4qm+IixnZXM6IuKpviIsZ2VzY2M6IuKqqSIsZ2VzZG90OiLiqoAiLGdlc2RvdG86IuKqgiIsZ2VzZG90b2w6IuKqhCIsZ2VzbDoi4oub77iAIixnZXNsZXM6IuKqlCIsR2ZyOiLwnZSKIixnZnI6IvCdlKQiLEdnOiLii5kiLGdnOiLiiasiLGdnZzoi4ouZIixnaW1lbDoi4oS3IixHSmN5OiLQgyIsZ2pjeToi0ZMiLGdsOiLiibciLGdsYToi4qqlIixnbEU6IuKqkiIsZ2xqOiLiqqQiLGduYXA6IuKqiiIsZ25hcHByb3g6IuKqiiIsZ25FOiLiiakiLGduZToi4qqIIixnbmVxOiLiqogiLGduZXFxOiLiiakiLGduc2ltOiLii6ciLEdvcGY6IvCdlL4iLGdvcGY6IvCdlZgiLGdyYXZlOiJgIixHcmVhdGVyRXF1YWw6IuKJpSIsR3JlYXRlckVxdWFsTGVzczoi4oubIixHcmVhdGVyRnVsbEVxdWFsOiLiiaciLEdyZWF0ZXJHcmVhdGVyOiLiqqIiLEdyZWF0ZXJMZXNzOiLiibciLEdyZWF0ZXJTbGFudEVxdWFsOiLiqb4iLEdyZWF0ZXJUaWxkZToi4omzIixHc2NyOiLwnZKiIixnc2NyOiLihIoiLGdzaW06IuKJsyIsZ3NpbWU6IuKqjiIsZ3NpbWw6IuKqkCIsR3Q6IuKJqyIsR1Q6Ij4iLGd0OiI+IixndGNjOiLiqqciLGd0Y2lyOiLiqboiLGd0ZG90OiLii5ciLGd0bFBhcjoi4qaVIixndHF1ZXN0OiLiqbwiLGd0cmFwcHJveDoi4qqGIixndHJhcnI6IuKluCIsZ3RyZG90OiLii5ciLGd0cmVxbGVzczoi4oubIixndHJlcXFsZXNzOiLiqowiLGd0cmxlc3M6IuKJtyIsZ3Ryc2ltOiLiibMiLGd2ZXJ0bmVxcToi4omp77iAIixndm5FOiLiianvuIAiLEhhY2VrOiLLhyIsaGFpcnNwOiLigIoiLGhhbGY6IsK9IixoYW1pbHQ6IuKEiyIsSEFSRGN5OiLQqiIsaGFyZGN5OiLRiiIsaEFycjoi4oeUIixoYXJyOiLihpQiLGhhcnJjaXI6IuKliCIsaGFycnc6IuKGrSIsSGF0OiJeIixoYmFyOiLihI8iLEhjaXJjOiLEpCIsaGNpcmM6IsSlIixoZWFydHM6IuKZpSIsaGVhcnRzdWl0OiLimaUiLGhlbGxpcDoi4oCmIixoZXJjb246IuKKuSIsSGZyOiLihIwiLGhmcjoi8J2UpSIsSGlsYmVydFNwYWNlOiLihIsiLGhrc2Vhcm93OiLipKUiLGhrc3dhcm93OiLipKYiLGhvYXJyOiLih78iLGhvbXRodDoi4oi7Iixob29rbGVmdGFycm93OiLihqkiLGhvb2tyaWdodGFycm93OiLihqoiLEhvcGY6IuKEjSIsaG9wZjoi8J2VmSIsaG9yYmFyOiLigJUiLEhvcml6b250YWxMaW5lOiLilIAiLEhzY3I6IuKEiyIsaHNjcjoi8J2SvSIsaHNsYXNoOiLihI8iLEhzdHJvazoixKYiLGhzdHJvazoixKciLEh1bXBEb3duSHVtcDoi4omOIixIdW1wRXF1YWw6IuKJjyIsaHlidWxsOiLigYMiLGh5cGhlbjoi4oCQIixJYWN1dGU6IsONIixpYWN1dGU6IsOtIixpYzoi4oGjIixJY2lyYzoiw44iLGljaXJjOiLDriIsSWN5OiLQmCIsaWN5OiLQuCIsSWRvdDoixLAiLElFY3k6ItCVIixpZWN5OiLQtSIsaWV4Y2w6IsKhIixpZmY6IuKHlCIsSWZyOiLihJEiLGlmcjoi8J2UpiIsSWdyYXZlOiLDjCIsaWdyYXZlOiLDrCIsaWk6IuKFiCIsaWlpaW50OiLiqIwiLGlpaW50OiLiiK0iLGlpbmZpbjoi4qecIixpaW90YToi4oSpIixJSmxpZzoixLIiLGlqbGlnOiLEsyIsSW06IuKEkSIsSW1hY3I6IsSqIixpbWFjcjoixKsiLGltYWdlOiLihJEiLEltYWdpbmFyeUk6IuKFiCIsaW1hZ2xpbmU6IuKEkCIsaW1hZ3BhcnQ6IuKEkSIsaW1hdGg6IsSxIixpbW9mOiLiirciLGltcGVkOiLGtSIsSW1wbGllczoi4oeSIixpbjoi4oiIIixpbmNhcmU6IuKEhSIsaW5maW46IuKIniIsaW5maW50aWU6IuKnnSIsaW5vZG90OiLEsSIsSW50OiLiiKwiLGludDoi4oirIixpbnRjYWw6IuKKuiIsaW50ZWdlcnM6IuKEpCIsSW50ZWdyYWw6IuKIqyIsaW50ZXJjYWw6IuKKuiIsSW50ZXJzZWN0aW9uOiLii4IiLGludGxhcmhrOiLiqJciLGludHByb2Q6IuKovCIsSW52aXNpYmxlQ29tbWE6IuKBoyIsSW52aXNpYmxlVGltZXM6IuKBoiIsSU9jeToi0IEiLGlvY3k6ItGRIixJb2dvbjoixK4iLGlvZ29uOiLEryIsSW9wZjoi8J2VgCIsaW9wZjoi8J2VmiIsSW90YToizpkiLGlvdGE6Is65IixpcHJvZDoi4qi8IixpcXVlc3Q6IsK/IixJc2NyOiLihJAiLGlzY3I6IvCdkr4iLGlzaW46IuKIiCIsaXNpbmRvdDoi4ou1Iixpc2luRToi4ou5Iixpc2luczoi4ou0Iixpc2luc3Y6IuKLsyIsaXNpbnY6IuKIiCIsaXQ6IuKBoiIsSXRpbGRlOiLEqCIsaXRpbGRlOiLEqSIsSXVrY3k6ItCGIixpdWtjeToi0ZYiLEl1bWw6IsOPIixpdW1sOiLDryIsSmNpcmM6IsS0IixqY2lyYzoixLUiLEpjeToi0JkiLGpjeToi0LkiLEpmcjoi8J2UjSIsamZyOiLwnZSnIixqbWF0aDoiyLciLEpvcGY6IvCdlYEiLGpvcGY6IvCdlZsiLEpzY3I6IvCdkqUiLGpzY3I6IvCdkr8iLEpzZXJjeToi0IgiLGpzZXJjeToi0ZgiLEp1a2N5OiLQhCIsanVrY3k6ItGUIixLYXBwYToizpoiLGthcHBhOiLOuiIsa2FwcGF2OiLPsCIsS2NlZGlsOiLEtiIsa2NlZGlsOiLEtyIsS2N5OiLQmiIsa2N5OiLQuiIsS2ZyOiLwnZSOIixrZnI6IvCdlKgiLGtncmVlbjoixLgiLEtIY3k6ItClIixraGN5OiLRhSIsS0pjeToi0IwiLGtqY3k6ItGcIixLb3BmOiLwnZWCIixrb3BmOiLwnZWcIixLc2NyOiLwnZKmIixrc2NyOiLwnZOAIixsQWFycjoi4oeaIixMYWN1dGU6IsS5IixsYWN1dGU6IsS6IixsYWVtcHR5djoi4qa0IixsYWdyYW46IuKEkiIsTGFtYmRhOiLOmyIsbGFtYmRhOiLOuyIsTGFuZzoi4p+qIixsYW5nOiLin6giLGxhbmdkOiLippEiLGxhbmdsZToi4p+oIixsYXA6IuKqhSIsTGFwbGFjZXRyZjoi4oSSIixsYXF1bzoiwqsiLExhcnI6IuKGniIsbEFycjoi4oeQIixsYXJyOiLihpAiLGxhcnJiOiLih6QiLGxhcnJiZnM6IuKknyIsbGFycmZzOiLipJ0iLGxhcnJoazoi4oapIixsYXJybHA6IuKGqyIsbGFycnBsOiLipLkiLGxhcnJzaW06IuKlsyIsbGFycnRsOiLihqIiLGxhdDoi4qqrIixsQXRhaWw6IuKkmyIsbGF0YWlsOiLipJkiLGxhdGU6IuKqrSIsbGF0ZXM6IuKqre+4gCIsbEJhcnI6IuKkjiIsbGJhcnI6IuKkjCIsbGJicms6IuKdsiIsbGJyYWNlOiJ7IixsYnJhY2s6IlsiLGxicmtlOiLiposiLGxicmtzbGQ6IuKmjyIsbGJya3NsdToi4qaNIixMY2Fyb246IsS9IixsY2Fyb246IsS+IixMY2VkaWw6IsS7IixsY2VkaWw6IsS8IixsY2VpbDoi4oyIIixsY3ViOiJ7IixMY3k6ItCbIixsY3k6ItC7IixsZGNhOiLipLYiLGxkcXVvOiLigJwiLGxkcXVvcjoi4oCeIixsZHJkaGFyOiLipaciLGxkcnVzaGFyOiLipYsiLGxkc2g6IuKGsiIsbEU6IuKJpiIsbGU6IuKJpCIsTGVmdEFuZ2xlQnJhY2tldDoi4p+oIixMZWZ0QXJyb3c6IuKGkCIsTGVmdGFycm93OiLih5AiLGxlZnRhcnJvdzoi4oaQIixMZWZ0QXJyb3dCYXI6IuKHpCIsTGVmdEFycm93UmlnaHRBcnJvdzoi4oeGIixsZWZ0YXJyb3d0YWlsOiLihqIiLExlZnRDZWlsaW5nOiLijIgiLExlZnREb3VibGVCcmFja2V0OiLin6YiLExlZnREb3duVGVlVmVjdG9yOiLipaEiLExlZnREb3duVmVjdG9yOiLih4MiLExlZnREb3duVmVjdG9yQmFyOiLipZkiLExlZnRGbG9vcjoi4oyKIixsZWZ0aGFycG9vbmRvd246IuKGvSIsbGVmdGhhcnBvb251cDoi4oa8IixsZWZ0bGVmdGFycm93czoi4oeHIixMZWZ0UmlnaHRBcnJvdzoi4oaUIixMZWZ0cmlnaHRhcnJvdzoi4oeUIixsZWZ0cmlnaHRhcnJvdzoi4oaUIixsZWZ0cmlnaHRhcnJvd3M6IuKHhiIsbGVmdHJpZ2h0aGFycG9vbnM6IuKHiyIsbGVmdHJpZ2h0c3F1aWdhcnJvdzoi4oatIixMZWZ0UmlnaHRWZWN0b3I6IuKljiIsTGVmdFRlZToi4oqjIixMZWZ0VGVlQXJyb3c6IuKGpCIsTGVmdFRlZVZlY3Rvcjoi4qWaIixsZWZ0dGhyZWV0aW1lczoi4ouLIixMZWZ0VHJpYW5nbGU6IuKKsiIsTGVmdFRyaWFuZ2xlQmFyOiLip48iLExlZnRUcmlhbmdsZUVxdWFsOiLiirQiLExlZnRVcERvd25WZWN0b3I6IuKlkSIsTGVmdFVwVGVlVmVjdG9yOiLipaAiLExlZnRVcFZlY3Rvcjoi4oa/IixMZWZ0VXBWZWN0b3JCYXI6IuKlmCIsTGVmdFZlY3Rvcjoi4oa8IixMZWZ0VmVjdG9yQmFyOiLipZIiLGxFZzoi4qqLIixsZWc6IuKLmiIsbGVxOiLiiaQiLGxlcXE6IuKJpiIsbGVxc2xhbnQ6IuKpvSIsbGVzOiLiqb0iLGxlc2NjOiLiqqgiLGxlc2RvdDoi4qm/IixsZXNkb3RvOiLiqoEiLGxlc2RvdG9yOiLiqoMiLGxlc2c6IuKLmu+4gCIsbGVzZ2VzOiLiqpMiLGxlc3NhcHByb3g6IuKqhSIsbGVzc2RvdDoi4ouWIixsZXNzZXFndHI6IuKLmiIsbGVzc2VxcWd0cjoi4qqLIixMZXNzRXF1YWxHcmVhdGVyOiLii5oiLExlc3NGdWxsRXF1YWw6IuKJpiIsTGVzc0dyZWF0ZXI6IuKJtiIsbGVzc2d0cjoi4om2IixMZXNzTGVzczoi4qqhIixsZXNzc2ltOiLiibIiLExlc3NTbGFudEVxdWFsOiLiqb0iLExlc3NUaWxkZToi4omyIixsZmlzaHQ6IuKlvCIsbGZsb29yOiLijIoiLExmcjoi8J2UjyIsbGZyOiLwnZSpIixsZzoi4om2IixsZ0U6IuKqkSIsbEhhcjoi4qWiIixsaGFyZDoi4oa9IixsaGFydToi4oa8IixsaGFydWw6IuKlqiIsbGhibGs6IuKWhCIsTEpjeToi0IkiLGxqY3k6ItGZIixMbDoi4ouYIixsbDoi4omqIixsbGFycjoi4oeHIixsbGNvcm5lcjoi4oyeIixMbGVmdGFycm93OiLih5oiLGxsaGFyZDoi4qWrIixsbHRyaToi4pe6IixMbWlkb3Q6IsS/IixsbWlkb3Q6IsWAIixsbW91c3Q6IuKOsCIsbG1vdXN0YWNoZToi4o6wIixsbmFwOiLiqokiLGxuYXBwcm94OiLiqokiLGxuRToi4omoIixsbmU6IuKqhyIsbG5lcToi4qqHIixsbmVxcToi4omoIixsbnNpbToi4oumIixsb2FuZzoi4p+sIixsb2Fycjoi4oe9Iixsb2Jyazoi4p+mIixMb25nTGVmdEFycm93OiLin7UiLExvbmdsZWZ0YXJyb3c6IuKfuCIsbG9uZ2xlZnRhcnJvdzoi4p+1IixMb25nTGVmdFJpZ2h0QXJyb3c6IuKftyIsTG9uZ2xlZnRyaWdodGFycm93OiLin7oiLGxvbmdsZWZ0cmlnaHRhcnJvdzoi4p+3Iixsb25nbWFwc3RvOiLin7wiLExvbmdSaWdodEFycm93OiLin7YiLExvbmdyaWdodGFycm93OiLin7kiLGxvbmdyaWdodGFycm93OiLin7YiLGxvb3BhcnJvd2xlZnQ6IuKGqyIsbG9vcGFycm93cmlnaHQ6IuKGrCIsbG9wYXI6IuKmhSIsTG9wZjoi8J2VgyIsbG9wZjoi8J2VnSIsbG9wbHVzOiLiqK0iLGxvdGltZXM6IuKotCIsbG93YXN0OiLiiJciLGxvd2JhcjoiXyIsTG93ZXJMZWZ0QXJyb3c6IuKGmSIsTG93ZXJSaWdodEFycm93OiLihpgiLGxvejoi4peKIixsb3plbmdlOiLil4oiLGxvemY6IuKnqyIsbHBhcjoiKCIsbHBhcmx0OiLippMiLGxyYXJyOiLih4YiLGxyY29ybmVyOiLijJ8iLGxyaGFyOiLih4siLGxyaGFyZDoi4qWtIixscm06IuKAjiIsbHJ0cmk6IuKKvyIsbHNhcXVvOiLigLkiLExzY3I6IuKEkiIsbHNjcjoi8J2TgSIsTHNoOiLihrAiLGxzaDoi4oawIixsc2ltOiLiibIiLGxzaW1lOiLiqo0iLGxzaW1nOiLiqo8iLGxzcWI6IlsiLGxzcXVvOiLigJgiLGxzcXVvcjoi4oCaIixMc3Ryb2s6IsWBIixsc3Ryb2s6IsWCIixMdDoi4omqIixMVDoiPCIsbHQ6IjwiLGx0Y2M6IuKqpiIsbHRjaXI6IuKpuSIsbHRkb3Q6IuKLliIsbHRocmVlOiLii4siLGx0aW1lczoi4ouJIixsdGxhcnI6IuKltiIsbHRxdWVzdDoi4qm7IixsdHJpOiLil4MiLGx0cmllOiLiirQiLGx0cmlmOiLil4IiLGx0clBhcjoi4qaWIixsdXJkc2hhcjoi4qWKIixsdXJ1aGFyOiLipaYiLGx2ZXJ0bmVxcToi4omo77iAIixsdm5FOiLiiajvuIAiLG1hY3I6IsKvIixtYWxlOiLimYIiLG1hbHQ6IuKcoCIsbWFsdGVzZToi4pygIixNYXA6IuKkhSIsbWFwOiLihqYiLG1hcHN0bzoi4oamIixtYXBzdG9kb3duOiLihqciLG1hcHN0b2xlZnQ6IuKGpCIsbWFwc3RvdXA6IuKGpSIsbWFya2VyOiLilq4iLG1jb21tYToi4qipIixNY3k6ItCcIixtY3k6ItC8IixtZGFzaDoi4oCUIixtRERvdDoi4oi6IixtZWFzdXJlZGFuZ2xlOiLiiKEiLE1lZGl1bVNwYWNlOiLigZ8iLE1lbGxpbnRyZjoi4oSzIixNZnI6IvCdlJAiLG1mcjoi8J2UqiIsbWhvOiLihKciLG1pY3JvOiLCtSIsbWlkOiLiiKMiLG1pZGFzdDoiKiIsbWlkY2lyOiLiq7AiLG1pZGRvdDoiwrciLG1pbnVzOiLiiJIiLG1pbnVzYjoi4oqfIixtaW51c2Q6IuKIuCIsbWludXNkdToi4qiqIixNaW51c1BsdXM6IuKIkyIsbWxjcDoi4qubIixtbGRyOiLigKYiLG1ucGx1czoi4oiTIixtb2RlbHM6IuKKpyIsTW9wZjoi8J2VhCIsbW9wZjoi8J2VniIsbXA6IuKIkyIsTXNjcjoi4oSzIixtc2NyOiLwnZOCIixtc3Rwb3M6IuKIviIsTXU6Is6cIixtdToizrwiLG11bHRpbWFwOiLiirgiLG11bWFwOiLiirgiLG5hYmxhOiLiiIciLE5hY3V0ZToixYMiLG5hY3V0ZToixYQiLG5hbmc6IuKIoOKDkiIsbmFwOiLiiYkiLG5hcEU6IuKpsMy4IixuYXBpZDoi4omLzLgiLG5hcG9zOiLFiSIsbmFwcHJveDoi4omJIixuYXR1cjoi4pmuIixuYXR1cmFsOiLima4iLG5hdHVyYWxzOiLihJUiLG5ic3A6IsKgIixuYnVtcDoi4omOzLgiLG5idW1wZToi4omPzLgiLG5jYXA6IuKpgyIsTmNhcm9uOiLFhyIsbmNhcm9uOiLFiCIsTmNlZGlsOiLFhSIsbmNlZGlsOiLFhiIsbmNvbmc6IuKJhyIsbmNvbmdkb3Q6IuKprcy4IixuY3VwOiLiqYIiLE5jeToi0J0iLG5jeToi0L0iLG5kYXNoOiLigJMiLG5lOiLiiaAiLG5lYXJoazoi4qSkIixuZUFycjoi4oeXIixuZWFycjoi4oaXIixuZWFycm93OiLihpciLG5lZG90OiLiiZDMuCIsTmVnYXRpdmVNZWRpdW1TcGFjZToi4oCLIixOZWdhdGl2ZVRoaWNrU3BhY2U6IuKAiyIsTmVnYXRpdmVUaGluU3BhY2U6IuKAiyIsTmVnYXRpdmVWZXJ5VGhpblNwYWNlOiLigIsiLG5lcXVpdjoi4omiIixuZXNlYXI6IuKkqCIsbmVzaW06IuKJgsy4IixOZXN0ZWRHcmVhdGVyR3JlYXRlcjoi4omrIixOZXN0ZWRMZXNzTGVzczoi4omqIixOZXdMaW5lOmAKYCxuZXhpc3Q6IuKIhCIsbmV4aXN0czoi4oiEIixOZnI6IvCdlJEiLG5mcjoi8J2UqyIsbmdFOiLiiafMuCIsbmdlOiLiibEiLG5nZXE6IuKJsSIsbmdlcXE6IuKJp8y4IixuZ2Vxc2xhbnQ6IuKpvsy4IixuZ2VzOiLiqb7MuCIsbkdnOiLii5nMuCIsbmdzaW06IuKJtSIsbkd0OiLiiavig5IiLG5ndDoi4omvIixuZ3RyOiLiia8iLG5HdHY6IuKJq8y4IixuaEFycjoi4oeOIixuaGFycjoi4oauIixuaHBhcjoi4quyIixuaToi4oiLIixuaXM6IuKLvCIsbmlzZDoi4ou6IixuaXY6IuKIiyIsTkpjeToi0IoiLG5qY3k6ItGaIixubEFycjoi4oeNIixubGFycjoi4oaaIixubGRyOiLigKUiLG5sRToi4ommzLgiLG5sZToi4omwIixuTGVmdGFycm93OiLih40iLG5sZWZ0YXJyb3c6IuKGmiIsbkxlZnRyaWdodGFycm93OiLih44iLG5sZWZ0cmlnaHRhcnJvdzoi4oauIixubGVxOiLiibAiLG5sZXFxOiLiiabMuCIsbmxlcXNsYW50OiLiqb3MuCIsbmxlczoi4qm9zLgiLG5sZXNzOiLiia4iLG5MbDoi4ouYzLgiLG5sc2ltOiLiibQiLG5MdDoi4omq4oOSIixubHQ6IuKJriIsbmx0cmk6IuKLqiIsbmx0cmllOiLii6wiLG5MdHY6IuKJqsy4IixubWlkOiLiiKQiLE5vQnJlYWs6IuKBoCIsTm9uQnJlYWtpbmdTcGFjZToiwqAiLE5vcGY6IuKElSIsbm9wZjoi8J2VnyIsTm90OiLiq6wiLG5vdDoiwqwiLE5vdENvbmdydWVudDoi4omiIixOb3RDdXBDYXA6IuKJrSIsTm90RG91YmxlVmVydGljYWxCYXI6IuKIpiIsTm90RWxlbWVudDoi4oiJIixOb3RFcXVhbDoi4omgIixOb3RFcXVhbFRpbGRlOiLiiYLMuCIsTm90RXhpc3RzOiLiiIQiLE5vdEdyZWF0ZXI6IuKJryIsTm90R3JlYXRlckVxdWFsOiLiibEiLE5vdEdyZWF0ZXJGdWxsRXF1YWw6IuKJp8y4IixOb3RHcmVhdGVyR3JlYXRlcjoi4omrzLgiLE5vdEdyZWF0ZXJMZXNzOiLiibkiLE5vdEdyZWF0ZXJTbGFudEVxdWFsOiLiqb7MuCIsTm90R3JlYXRlclRpbGRlOiLiibUiLE5vdEh1bXBEb3duSHVtcDoi4omOzLgiLE5vdEh1bXBFcXVhbDoi4omPzLgiLG5vdGluOiLiiIkiLG5vdGluZG90OiLii7XMuCIsbm90aW5FOiLii7nMuCIsbm90aW52YToi4oiJIixub3RpbnZiOiLii7ciLG5vdGludmM6IuKLtiIsTm90TGVmdFRyaWFuZ2xlOiLii6oiLE5vdExlZnRUcmlhbmdsZUJhcjoi4qePzLgiLE5vdExlZnRUcmlhbmdsZUVxdWFsOiLii6wiLE5vdExlc3M6IuKJriIsTm90TGVzc0VxdWFsOiLiibAiLE5vdExlc3NHcmVhdGVyOiLiibgiLE5vdExlc3NMZXNzOiLiiarMuCIsTm90TGVzc1NsYW50RXF1YWw6IuKpvcy4IixOb3RMZXNzVGlsZGU6IuKJtCIsTm90TmVzdGVkR3JlYXRlckdyZWF0ZXI6IuKqosy4IixOb3ROZXN0ZWRMZXNzTGVzczoi4qqhzLgiLG5vdG5pOiLiiIwiLG5vdG5pdmE6IuKIjCIsbm90bml2Yjoi4ou+Iixub3RuaXZjOiLii70iLE5vdFByZWNlZGVzOiLiioAiLE5vdFByZWNlZGVzRXF1YWw6IuKqr8y4IixOb3RQcmVjZWRlc1NsYW50RXF1YWw6IuKLoCIsTm90UmV2ZXJzZUVsZW1lbnQ6IuKIjCIsTm90UmlnaHRUcmlhbmdsZToi4ourIixOb3RSaWdodFRyaWFuZ2xlQmFyOiLip5DMuCIsTm90UmlnaHRUcmlhbmdsZUVxdWFsOiLii60iLE5vdFNxdWFyZVN1YnNldDoi4oqPzLgiLE5vdFNxdWFyZVN1YnNldEVxdWFsOiLii6IiLE5vdFNxdWFyZVN1cGVyc2V0OiLiipDMuCIsTm90U3F1YXJlU3VwZXJzZXRFcXVhbDoi4oujIixOb3RTdWJzZXQ6IuKKguKDkiIsTm90U3Vic2V0RXF1YWw6IuKKiCIsTm90U3VjY2VlZHM6IuKKgSIsTm90U3VjY2VlZHNFcXVhbDoi4qqwzLgiLE5vdFN1Y2NlZWRzU2xhbnRFcXVhbDoi4ouhIixOb3RTdWNjZWVkc1RpbGRlOiLiib/MuCIsTm90U3VwZXJzZXQ6IuKKg+KDkiIsTm90U3VwZXJzZXRFcXVhbDoi4oqJIixOb3RUaWxkZToi4omBIixOb3RUaWxkZUVxdWFsOiLiiYQiLE5vdFRpbGRlRnVsbEVxdWFsOiLiiYciLE5vdFRpbGRlVGlsZGU6IuKJiSIsTm90VmVydGljYWxCYXI6IuKIpCIsbnBhcjoi4oimIixucGFyYWxsZWw6IuKIpiIsbnBhcnNsOiLiq73ig6UiLG5wYXJ0OiLiiILMuCIsbnBvbGludDoi4qiUIixucHI6IuKKgCIsbnByY3VlOiLii6AiLG5wcmU6IuKqr8y4IixucHJlYzoi4oqAIixucHJlY2VxOiLiqq/MuCIsbnJBcnI6IuKHjyIsbnJhcnI6IuKGmyIsbnJhcnJjOiLipLPMuCIsbnJhcnJ3OiLihp3MuCIsblJpZ2h0YXJyb3c6IuKHjyIsbnJpZ2h0YXJyb3c6IuKGmyIsbnJ0cmk6IuKLqyIsbnJ0cmllOiLii60iLG5zYzoi4oqBIixuc2NjdWU6IuKLoSIsbnNjZToi4qqwzLgiLE5zY3I6IvCdkqkiLG5zY3I6IvCdk4MiLG5zaG9ydG1pZDoi4oikIixuc2hvcnRwYXJhbGxlbDoi4oimIixuc2ltOiLiiYEiLG5zaW1lOiLiiYQiLG5zaW1lcToi4omEIixuc21pZDoi4oikIixuc3Bhcjoi4oimIixuc3FzdWJlOiLii6IiLG5zcXN1cGU6IuKLoyIsbnN1Yjoi4oqEIixuc3ViRToi4quFzLgiLG5zdWJlOiLiiogiLG5zdWJzZXQ6IuKKguKDkiIsbnN1YnNldGVxOiLiiogiLG5zdWJzZXRlcXE6IuKrhcy4Iixuc3VjYzoi4oqBIixuc3VjY2VxOiLiqrDMuCIsbnN1cDoi4oqFIixuc3VwRToi4quGzLgiLG5zdXBlOiLiiokiLG5zdXBzZXQ6IuKKg+KDkiIsbnN1cHNldGVxOiLiiokiLG5zdXBzZXRlcXE6IuKrhsy4IixudGdsOiLiibkiLE50aWxkZToiw5EiLG50aWxkZToiw7EiLG50bGc6IuKJuCIsbnRyaWFuZ2xlbGVmdDoi4ouqIixudHJpYW5nbGVsZWZ0ZXE6IuKLrCIsbnRyaWFuZ2xlcmlnaHQ6IuKLqyIsbnRyaWFuZ2xlcmlnaHRlcToi4outIixOdToizp0iLG51OiLOvSIsbnVtOiIjIixudW1lcm86IuKEliIsbnVtc3A6IuKAhyIsbnZhcDoi4omN4oOSIixuVkRhc2g6IuKKryIsblZkYXNoOiLiiq4iLG52RGFzaDoi4oqtIixudmRhc2g6IuKKrCIsbnZnZToi4oml4oOSIixudmd0OiI+4oOSIixudkhhcnI6IuKkhCIsbnZpbmZpbjoi4qeeIixudmxBcnI6IuKkgiIsbnZsZToi4omk4oOSIixudmx0OiI84oOSIixudmx0cmllOiLiirTig5IiLG52ckFycjoi4qSDIixudnJ0cmllOiLiirXig5IiLG52c2ltOiLiiLzig5IiLG53YXJoazoi4qSjIixud0Fycjoi4oeWIixud2Fycjoi4oaWIixud2Fycm93OiLihpYiLG53bmVhcjoi4qSnIixPYWN1dGU6IsOTIixvYWN1dGU6IsOzIixvYXN0OiLiipsiLG9jaXI6IuKKmiIsT2NpcmM6IsOUIixvY2lyYzoiw7QiLE9jeToi0J4iLG9jeToi0L4iLG9kYXNoOiLiip0iLE9kYmxhYzoixZAiLG9kYmxhYzoixZEiLG9kaXY6IuKouCIsb2RvdDoi4oqZIixvZHNvbGQ6IuKmvCIsT0VsaWc6IsWSIixvZWxpZzoixZMiLG9mY2lyOiLipr8iLE9mcjoi8J2UkiIsb2ZyOiLwnZSsIixvZ29uOiLLmyIsT2dyYXZlOiLDkiIsb2dyYXZlOiLDsiIsb2d0OiLip4EiLG9oYmFyOiLiprUiLG9obToizqkiLG9pbnQ6IuKIriIsb2xhcnI6IuKGuiIsb2xjaXI6IuKmviIsb2xjcm9zczoi4qa7IixvbGluZToi4oC+IixvbHQ6IuKngCIsT21hY3I6IsWMIixvbWFjcjoixY0iLE9tZWdhOiLOqSIsb21lZ2E6Is+JIixPbWljcm9uOiLOnyIsb21pY3Jvbjoizr8iLG9taWQ6IuKmtiIsb21pbnVzOiLiipYiLE9vcGY6IvCdlYYiLG9vcGY6IvCdlaAiLG9wYXI6IuKmtyIsT3BlbkN1cmx5RG91YmxlUXVvdGU6IuKAnCIsT3BlbkN1cmx5UXVvdGU6IuKAmCIsb3BlcnA6IuKmuSIsb3BsdXM6IuKKlSIsT3I6IuKplCIsb3I6IuKIqCIsb3JhcnI6IuKGuyIsb3JkOiLiqZ0iLG9yZGVyOiLihLQiLG9yZGVyb2Y6IuKEtCIsb3JkZjoiwqoiLG9yZG06IsK6Iixvcmlnb2Y6IuKKtiIsb3Jvcjoi4qmWIixvcnNsb3BlOiLiqZciLG9ydjoi4qmbIixvUzoi4pOIIixPc2NyOiLwnZKqIixvc2NyOiLihLQiLE9zbGFzaDoiw5giLG9zbGFzaDoiw7giLG9zb2w6IuKKmCIsT3RpbGRlOiLDlSIsb3RpbGRlOiLDtSIsT3RpbWVzOiLiqLciLG90aW1lczoi4oqXIixvdGltZXNhczoi4qi2IixPdW1sOiLDliIsb3VtbDoiw7YiLG92YmFyOiLijL0iLE92ZXJCYXI6IuKAviIsT3ZlckJyYWNlOiLij54iLE92ZXJCcmFja2V0OiLijrQiLE92ZXJQYXJlbnRoZXNpczoi4o+cIixwYXI6IuKIpSIscGFyYToiwrYiLHBhcmFsbGVsOiLiiKUiLHBhcnNpbToi4quzIixwYXJzbDoi4qu9IixwYXJ0OiLiiIIiLFBhcnRpYWxEOiLiiIIiLFBjeToi0J8iLHBjeToi0L8iLHBlcmNudDoiJSIscGVyaW9kOiIuIixwZXJtaWw6IuKAsCIscGVycDoi4oqlIixwZXJ0ZW5rOiLigLEiLFBmcjoi8J2UkyIscGZyOiLwnZStIixQaGk6Is6mIixwaGk6Is+GIixwaGl2OiLPlSIscGhtbWF0OiLihLMiLHBob25lOiLimI4iLFBpOiLOoCIscGk6Is+AIixwaXRjaGZvcms6IuKLlCIscGl2OiLPliIscGxhbmNrOiLihI8iLHBsYW5ja2g6IuKEjiIscGxhbmt2OiLihI8iLHBsdXM6IisiLHBsdXNhY2lyOiLiqKMiLHBsdXNiOiLiip4iLHBsdXNjaXI6IuKooiIscGx1c2RvOiLiiJQiLHBsdXNkdToi4qilIixwbHVzZToi4qmyIixQbHVzTWludXM6IsKxIixwbHVzbW46IsKxIixwbHVzc2ltOiLiqKYiLHBsdXN0d286IuKopyIscG06IsKxIixQb2luY2FyZXBsYW5lOiLihIwiLHBvaW50aW50OiLiqJUiLFBvcGY6IuKEmSIscG9wZjoi8J2VoSIscG91bmQ6IsKjIixQcjoi4qq7Iixwcjoi4om6IixwcmFwOiLiqrciLHByY3VlOiLiibwiLHByRToi4qqzIixwcmU6IuKqryIscHJlYzoi4om6IixwcmVjYXBwcm94OiLiqrciLHByZWNjdXJseWVxOiLiibwiLFByZWNlZGVzOiLiiboiLFByZWNlZGVzRXF1YWw6IuKqryIsUHJlY2VkZXNTbGFudEVxdWFsOiLiibwiLFByZWNlZGVzVGlsZGU6IuKJviIscHJlY2VxOiLiqq8iLHByZWNuYXBwcm94OiLiqrkiLHByZWNuZXFxOiLiqrUiLHByZWNuc2ltOiLii6giLHByZWNzaW06IuKJviIsUHJpbWU6IuKAsyIscHJpbWU6IuKAsiIscHJpbWVzOiLihJkiLHBybmFwOiLiqrkiLHBybkU6IuKqtSIscHJuc2ltOiLii6giLHByb2Q6IuKIjyIsUHJvZHVjdDoi4oiPIixwcm9mYWxhcjoi4oyuIixwcm9mbGluZToi4oySIixwcm9mc3VyZjoi4oyTIixwcm9wOiLiiJ0iLFByb3BvcnRpb246IuKItyIsUHJvcG9ydGlvbmFsOiLiiJ0iLHByb3B0bzoi4oidIixwcnNpbToi4om+IixwcnVyZWw6IuKKsCIsUHNjcjoi8J2SqyIscHNjcjoi8J2ThSIsUHNpOiLOqCIscHNpOiLPiCIscHVuY3NwOiLigIgiLFFmcjoi8J2UlCIscWZyOiLwnZSuIixxaW50OiLiqIwiLFFvcGY6IuKEmiIscW9wZjoi8J2VoiIscXByaW1lOiLigZciLFFzY3I6IvCdkqwiLHFzY3I6IvCdk4YiLHF1YXRlcm5pb25zOiLihI0iLHF1YXRpbnQ6IuKoliIscXVlc3Q6Ij8iLHF1ZXN0ZXE6IuKJnyIsUVVPVDonIicscXVvdDonIicsckFhcnI6IuKHmyIscmFjZToi4oi9zLEiLFJhY3V0ZToixZQiLHJhY3V0ZToixZUiLHJhZGljOiLiiJoiLHJhZW1wdHl2OiLiprMiLFJhbmc6IuKfqyIscmFuZzoi4p+pIixyYW5nZDoi4qaSIixyYW5nZToi4qalIixyYW5nbGU6IuKfqSIscmFxdW86IsK7IixSYXJyOiLihqAiLHJBcnI6IuKHkiIscmFycjoi4oaSIixyYXJyYXA6IuKltSIscmFycmI6IuKHpSIscmFycmJmczoi4qSgIixyYXJyYzoi4qSzIixyYXJyZnM6IuKkniIscmFycmhrOiLihqoiLHJhcnJscDoi4oasIixyYXJycGw6IuKlhSIscmFycnNpbToi4qW0IixSYXJydGw6IuKkliIscmFycnRsOiLihqMiLHJhcnJ3OiLihp0iLHJBdGFpbDoi4qScIixyYXRhaWw6IuKkmiIscmF0aW86IuKItiIscmF0aW9uYWxzOiLihJoiLFJCYXJyOiLipJAiLHJCYXJyOiLipI8iLHJiYXJyOiLipI0iLHJiYnJrOiLinbMiLHJicmFjZToifSIscmJyYWNrOiJdIixyYnJrZToi4qaMIixyYnJrc2xkOiLipo4iLHJicmtzbHU6IuKmkCIsUmNhcm9uOiLFmCIscmNhcm9uOiLFmSIsUmNlZGlsOiLFliIscmNlZGlsOiLFlyIscmNlaWw6IuKMiSIscmN1YjoifSIsUmN5OiLQoCIscmN5OiLRgCIscmRjYToi4qS3IixyZGxkaGFyOiLipakiLHJkcXVvOiLigJ0iLHJkcXVvcjoi4oCdIixyZHNoOiLihrMiLFJlOiLihJwiLHJlYWw6IuKEnCIscmVhbGluZToi4oSbIixyZWFscGFydDoi4oScIixyZWFsczoi4oSdIixyZWN0OiLilq0iLFJFRzoiwq4iLHJlZzoiwq4iLFJldmVyc2VFbGVtZW50OiLiiIsiLFJldmVyc2VFcXVpbGlicml1bToi4oeLIixSZXZlcnNlVXBFcXVpbGlicml1bToi4qWvIixyZmlzaHQ6IuKlvSIscmZsb29yOiLijIsiLFJmcjoi4oScIixyZnI6IvCdlK8iLHJIYXI6IuKlpCIscmhhcmQ6IuKHgSIscmhhcnU6IuKHgCIscmhhcnVsOiLipawiLFJobzoizqEiLHJobzoiz4EiLHJob3Y6Is+xIixSaWdodEFuZ2xlQnJhY2tldDoi4p+pIixSaWdodEFycm93OiLihpIiLFJpZ2h0YXJyb3c6IuKHkiIscmlnaHRhcnJvdzoi4oaSIixSaWdodEFycm93QmFyOiLih6UiLFJpZ2h0QXJyb3dMZWZ0QXJyb3c6IuKHhCIscmlnaHRhcnJvd3RhaWw6IuKGoyIsUmlnaHRDZWlsaW5nOiLijIkiLFJpZ2h0RG91YmxlQnJhY2tldDoi4p+nIixSaWdodERvd25UZWVWZWN0b3I6IuKlnSIsUmlnaHREb3duVmVjdG9yOiLih4IiLFJpZ2h0RG93blZlY3RvckJhcjoi4qWVIixSaWdodEZsb29yOiLijIsiLHJpZ2h0aGFycG9vbmRvd246IuKHgSIscmlnaHRoYXJwb29udXA6IuKHgCIscmlnaHRsZWZ0YXJyb3dzOiLih4QiLHJpZ2h0bGVmdGhhcnBvb25zOiLih4wiLHJpZ2h0cmlnaHRhcnJvd3M6IuKHiSIscmlnaHRzcXVpZ2Fycm93OiLihp0iLFJpZ2h0VGVlOiLiiqIiLFJpZ2h0VGVlQXJyb3c6IuKGpiIsUmlnaHRUZWVWZWN0b3I6IuKlmyIscmlnaHR0aHJlZXRpbWVzOiLii4wiLFJpZ2h0VHJpYW5nbGU6IuKKsyIsUmlnaHRUcmlhbmdsZUJhcjoi4qeQIixSaWdodFRyaWFuZ2xlRXF1YWw6IuKKtSIsUmlnaHRVcERvd25WZWN0b3I6IuKljyIsUmlnaHRVcFRlZVZlY3Rvcjoi4qWcIixSaWdodFVwVmVjdG9yOiLihr4iLFJpZ2h0VXBWZWN0b3JCYXI6IuKllCIsUmlnaHRWZWN0b3I6IuKHgCIsUmlnaHRWZWN0b3JCYXI6IuKlkyIscmluZzoiy5oiLHJpc2luZ2RvdHNlcToi4omTIixybGFycjoi4oeEIixybGhhcjoi4oeMIixybG06IuKAjyIscm1vdXN0OiLijrEiLHJtb3VzdGFjaGU6IuKOsSIscm5taWQ6IuKrriIscm9hbmc6IuKfrSIscm9hcnI6IuKHviIscm9icms6IuKfpyIscm9wYXI6IuKmhiIsUm9wZjoi4oSdIixyb3BmOiLwnZWjIixyb3BsdXM6IuKoriIscm90aW1lczoi4qi1IixSb3VuZEltcGxpZXM6IuKlsCIscnBhcjoiKSIscnBhcmd0OiLippQiLHJwcG9saW50OiLiqJIiLHJyYXJyOiLih4kiLFJyaWdodGFycm93OiLih5siLHJzYXF1bzoi4oC6IixSc2NyOiLihJsiLHJzY3I6IvCdk4ciLFJzaDoi4oaxIixyc2g6IuKGsSIscnNxYjoiXSIscnNxdW86IuKAmSIscnNxdW9yOiLigJkiLHJ0aHJlZToi4ouMIixydGltZXM6IuKLiiIscnRyaToi4pa5IixydHJpZToi4oq1IixydHJpZjoi4pa4IixydHJpbHRyaToi4qeOIixSdWxlRGVsYXllZDoi4qe0IixydWx1aGFyOiLipagiLHJ4OiLihJ4iLFNhY3V0ZToixZoiLHNhY3V0ZToixZsiLHNicXVvOiLigJoiLFNjOiLiqrwiLHNjOiLiibsiLHNjYXA6IuKquCIsU2Nhcm9uOiLFoCIsc2Nhcm9uOiLFoSIsc2NjdWU6IuKJvSIsc2NFOiLiqrQiLHNjZToi4qqwIixTY2VkaWw6IsWeIixzY2VkaWw6IsWfIixTY2lyYzoixZwiLHNjaXJjOiLFnSIsc2NuYXA6IuKquiIsc2NuRToi4qq2IixzY25zaW06IuKLqSIsc2Nwb2xpbnQ6IuKokyIsc2NzaW06IuKJvyIsU2N5OiLQoSIsc2N5OiLRgSIsc2RvdDoi4ouFIixzZG90Yjoi4oqhIixzZG90ZToi4qmmIixzZWFyaGs6IuKkpSIsc2VBcnI6IuKHmCIsc2VhcnI6IuKGmCIsc2VhcnJvdzoi4oaYIixzZWN0OiLCpyIsc2VtaToiOyIsc2Vzd2FyOiLipKkiLHNldG1pbnVzOiLiiJYiLHNldG1uOiLiiJYiLHNleHQ6IuKctiIsU2ZyOiLwnZSWIixzZnI6IvCdlLAiLHNmcm93bjoi4oyiIixzaGFycDoi4pmvIixTSENIY3k6ItCpIixzaGNoY3k6ItGJIixTSGN5OiLQqCIsc2hjeToi0YgiLFNob3J0RG93bkFycm93OiLihpMiLFNob3J0TGVmdEFycm93OiLihpAiLHNob3J0bWlkOiLiiKMiLHNob3J0cGFyYWxsZWw6IuKIpSIsU2hvcnRSaWdodEFycm93OiLihpIiLFNob3J0VXBBcnJvdzoi4oaRIixzaHk6IsKtIixTaWdtYToizqMiLHNpZ21hOiLPgyIsc2lnbWFmOiLPgiIsc2lnbWF2OiLPgiIsc2ltOiLiiLwiLHNpbWRvdDoi4qmqIixzaW1lOiLiiYMiLHNpbWVxOiLiiYMiLHNpbWc6IuKqniIsc2ltZ0U6IuKqoCIsc2ltbDoi4qqdIixzaW1sRToi4qqfIixzaW1uZToi4omGIixzaW1wbHVzOiLiqKQiLHNpbXJhcnI6IuKlsiIsc2xhcnI6IuKGkCIsU21hbGxDaXJjbGU6IuKImCIsc21hbGxzZXRtaW51czoi4oiWIixzbWFzaHA6IuKosyIsc21lcGFyc2w6IuKnpCIsc21pZDoi4oijIixzbWlsZToi4oyjIixzbXQ6IuKqqiIsc210ZToi4qqsIixzbXRlczoi4qqs77iAIixTT0ZUY3k6ItCsIixzb2Z0Y3k6ItGMIixzb2w6Ii8iLHNvbGI6IuKnhCIsc29sYmFyOiLijL8iLFNvcGY6IvCdlYoiLHNvcGY6IvCdlaQiLHNwYWRlczoi4pmgIixzcGFkZXN1aXQ6IuKZoCIsc3Bhcjoi4oilIixzcWNhcDoi4oqTIixzcWNhcHM6IuKKk++4gCIsc3FjdXA6IuKKlCIsc3FjdXBzOiLiipTvuIAiLFNxcnQ6IuKImiIsc3FzdWI6IuKKjyIsc3FzdWJlOiLiipEiLHNxc3Vic2V0OiLiio8iLHNxc3Vic2V0ZXE6IuKKkSIsc3FzdXA6IuKKkCIsc3FzdXBlOiLiipIiLHNxc3Vwc2V0OiLiipAiLHNxc3Vwc2V0ZXE6IuKKkiIsc3F1OiLilqEiLFNxdWFyZToi4pahIixzcXVhcmU6IuKWoSIsU3F1YXJlSW50ZXJzZWN0aW9uOiLiipMiLFNxdWFyZVN1YnNldDoi4oqPIixTcXVhcmVTdWJzZXRFcXVhbDoi4oqRIixTcXVhcmVTdXBlcnNldDoi4oqQIixTcXVhcmVTdXBlcnNldEVxdWFsOiLiipIiLFNxdWFyZVVuaW9uOiLiipQiLHNxdWFyZjoi4paqIixzcXVmOiLilqoiLHNyYXJyOiLihpIiLFNzY3I6IvCdkq4iLHNzY3I6IvCdk4giLHNzZXRtbjoi4oiWIixzc21pbGU6IuKMoyIsc3N0YXJmOiLii4YiLFN0YXI6IuKLhiIsc3Rhcjoi4piGIixzdGFyZjoi4piFIixzdHJhaWdodGVwc2lsb246Is+1IixzdHJhaWdodHBoaToiz5UiLHN0cm5zOiLCryIsU3ViOiLii5AiLHN1Yjoi4oqCIixzdWJkb3Q6IuKqvSIsc3ViRToi4quFIixzdWJlOiLiioYiLHN1YmVkb3Q6IuKrgyIsc3VibXVsdDoi4quBIixzdWJuRToi4quLIixzdWJuZToi4oqKIixzdWJwbHVzOiLiqr8iLHN1YnJhcnI6IuKluSIsU3Vic2V0OiLii5AiLHN1YnNldDoi4oqCIixzdWJzZXRlcToi4oqGIixzdWJzZXRlcXE6IuKrhSIsU3Vic2V0RXF1YWw6IuKKhiIsc3Vic2V0bmVxOiLiiooiLHN1YnNldG5lcXE6IuKriyIsc3Vic2ltOiLiq4ciLHN1YnN1Yjoi4quVIixzdWJzdXA6IuKrkyIsc3VjYzoi4om7IixzdWNjYXBwcm94OiLiqrgiLHN1Y2NjdXJseWVxOiLiib0iLFN1Y2NlZWRzOiLiibsiLFN1Y2NlZWRzRXF1YWw6IuKqsCIsU3VjY2VlZHNTbGFudEVxdWFsOiLiib0iLFN1Y2NlZWRzVGlsZGU6IuKJvyIsc3VjY2VxOiLiqrAiLHN1Y2NuYXBwcm94OiLiqroiLHN1Y2NuZXFxOiLiqrYiLHN1Y2Nuc2ltOiLii6kiLHN1Y2NzaW06IuKJvyIsU3VjaFRoYXQ6IuKIiyIsU3VtOiLiiJEiLHN1bToi4oiRIixzdW5nOiLimaoiLFN1cDoi4ouRIixzdXA6IuKKgyIsc3VwMToiwrkiLHN1cDI6IsKyIixzdXAzOiLCsyIsc3VwZG90OiLiqr4iLHN1cGRzdWI6IuKrmCIsc3VwRToi4quGIixzdXBlOiLiiociLHN1cGVkb3Q6IuKrhCIsU3VwZXJzZXQ6IuKKgyIsU3VwZXJzZXRFcXVhbDoi4oqHIixzdXBoc29sOiLin4kiLHN1cGhzdWI6IuKrlyIsc3VwbGFycjoi4qW7IixzdXBtdWx0OiLiq4IiLHN1cG5FOiLiq4wiLHN1cG5lOiLiiosiLHN1cHBsdXM6IuKrgCIsU3Vwc2V0OiLii5EiLHN1cHNldDoi4oqDIixzdXBzZXRlcToi4oqHIixzdXBzZXRlcXE6IuKrhiIsc3Vwc2V0bmVxOiLiiosiLHN1cHNldG5lcXE6IuKrjCIsc3Vwc2ltOiLiq4giLHN1cHN1Yjoi4quUIixzdXBzdXA6IuKrliIsc3dhcmhrOiLipKYiLHN3QXJyOiLih5kiLHN3YXJyOiLihpkiLHN3YXJyb3c6IuKGmSIsc3dud2FyOiLipKoiLHN6bGlnOiLDnyIsVGFiOiIJIix0YXJnZXQ6IuKMliIsVGF1OiLOpCIsdGF1OiLPhCIsdGJyazoi4o60IixUY2Fyb246IsWkIix0Y2Fyb246IsWlIixUY2VkaWw6IsWiIix0Y2VkaWw6IsWjIixUY3k6ItCiIix0Y3k6ItGCIix0ZG90OiLig5siLHRlbHJlYzoi4oyVIixUZnI6IvCdlJciLHRmcjoi8J2UsSIsdGhlcmU0OiLiiLQiLFRoZXJlZm9yZToi4oi0Iix0aGVyZWZvcmU6IuKItCIsVGhldGE6Is6YIix0aGV0YToizrgiLHRoZXRhc3ltOiLPkSIsdGhldGF2OiLPkSIsdGhpY2thcHByb3g6IuKJiCIsdGhpY2tzaW06IuKIvCIsVGhpY2tTcGFjZToi4oGf4oCKIix0aGluc3A6IuKAiSIsVGhpblNwYWNlOiLigIkiLHRoa2FwOiLiiYgiLHRoa3NpbToi4oi8IixUSE9STjoiw54iLHRob3JuOiLDviIsVGlsZGU6IuKIvCIsdGlsZGU6IsucIixUaWxkZUVxdWFsOiLiiYMiLFRpbGRlRnVsbEVxdWFsOiLiiYUiLFRpbGRlVGlsZGU6IuKJiCIsdGltZXM6IsOXIix0aW1lc2I6IuKKoCIsdGltZXNiYXI6IuKosSIsdGltZXNkOiLiqLAiLHRpbnQ6IuKIrSIsdG9lYToi4qSoIix0b3A6IuKKpCIsdG9wYm90OiLijLYiLHRvcGNpcjoi4quxIixUb3BmOiLwnZWLIix0b3BmOiLwnZWlIix0b3Bmb3JrOiLiq5oiLHRvc2E6IuKkqSIsdHByaW1lOiLigLQiLFRSQURFOiLihKIiLHRyYWRlOiLihKIiLHRyaWFuZ2xlOiLilrUiLHRyaWFuZ2xlZG93bjoi4pa/Iix0cmlhbmdsZWxlZnQ6IuKXgyIsdHJpYW5nbGVsZWZ0ZXE6IuKKtCIsdHJpYW5nbGVxOiLiiZwiLHRyaWFuZ2xlcmlnaHQ6IuKWuSIsdHJpYW5nbGVyaWdodGVxOiLiirUiLHRyaWRvdDoi4pesIix0cmllOiLiiZwiLHRyaW1pbnVzOiLiqLoiLFRyaXBsZURvdDoi4oObIix0cmlwbHVzOiLiqLkiLHRyaXNiOiLip40iLHRyaXRpbWU6IuKouyIsdHJwZXppdW06IuKPoiIsVHNjcjoi8J2SryIsdHNjcjoi8J2TiSIsVFNjeToi0KYiLHRzY3k6ItGGIixUU0hjeToi0IsiLHRzaGN5OiLRmyIsVHN0cm9rOiLFpiIsdHN0cm9rOiLFpyIsdHdpeHQ6IuKJrCIsdHdvaGVhZGxlZnRhcnJvdzoi4oaeIix0d29oZWFkcmlnaHRhcnJvdzoi4oagIixVYWN1dGU6IsOaIix1YWN1dGU6IsO6IixVYXJyOiLihp8iLHVBcnI6IuKHkSIsdWFycjoi4oaRIixVYXJyb2Npcjoi4qWJIixVYnJjeToi0I4iLHVicmN5OiLRniIsVWJyZXZlOiLFrCIsdWJyZXZlOiLFrSIsVWNpcmM6IsObIix1Y2lyYzoiw7siLFVjeToi0KMiLHVjeToi0YMiLHVkYXJyOiLih4UiLFVkYmxhYzoixbAiLHVkYmxhYzoixbEiLHVkaGFyOiLipa4iLHVmaXNodDoi4qW+IixVZnI6IvCdlJgiLHVmcjoi8J2UsiIsVWdyYXZlOiLDmSIsdWdyYXZlOiLDuSIsdUhhcjoi4qWjIix1aGFybDoi4oa/Iix1aGFycjoi4oa+Iix1aGJsazoi4paAIix1bGNvcm46IuKMnCIsdWxjb3JuZXI6IuKMnCIsdWxjcm9wOiLijI8iLHVsdHJpOiLil7giLFVtYWNyOiLFqiIsdW1hY3I6IsWrIix1bWw6IsKoIixVbmRlckJhcjoiXyIsVW5kZXJCcmFjZToi4o+fIixVbmRlckJyYWNrZXQ6IuKOtSIsVW5kZXJQYXJlbnRoZXNpczoi4o+dIixVbmlvbjoi4ouDIixVbmlvblBsdXM6IuKKjiIsVW9nb246IsWyIix1b2dvbjoixbMiLFVvcGY6IvCdlYwiLHVvcGY6IvCdlaYiLFVwQXJyb3c6IuKGkSIsVXBhcnJvdzoi4oeRIix1cGFycm93OiLihpEiLFVwQXJyb3dCYXI6IuKkkiIsVXBBcnJvd0Rvd25BcnJvdzoi4oeFIixVcERvd25BcnJvdzoi4oaVIixVcGRvd25hcnJvdzoi4oeVIix1cGRvd25hcnJvdzoi4oaVIixVcEVxdWlsaWJyaXVtOiLipa4iLHVwaGFycG9vbmxlZnQ6IuKGvyIsdXBoYXJwb29ucmlnaHQ6IuKGviIsdXBsdXM6IuKKjiIsVXBwZXJMZWZ0QXJyb3c6IuKGliIsVXBwZXJSaWdodEFycm93OiLihpciLFVwc2k6Is+SIix1cHNpOiLPhSIsdXBzaWg6Is+SIixVcHNpbG9uOiLOpSIsdXBzaWxvbjoiz4UiLFVwVGVlOiLiiqUiLFVwVGVlQXJyb3c6IuKGpSIsdXB1cGFycm93czoi4oeIIix1cmNvcm46IuKMnSIsdXJjb3JuZXI6IuKMnSIsdXJjcm9wOiLijI4iLFVyaW5nOiLFriIsdXJpbmc6IsWvIix1cnRyaToi4pe5IixVc2NyOiLwnZKwIix1c2NyOiLwnZOKIix1dGRvdDoi4ouwIixVdGlsZGU6IsWoIix1dGlsZGU6IsWpIix1dHJpOiLilrUiLHV0cmlmOiLilrQiLHV1YXJyOiLih4giLFV1bWw6IsOcIix1dW1sOiLDvCIsdXdhbmdsZToi4qanIix2YW5ncnQ6IuKmnCIsdmFyZXBzaWxvbjoiz7UiLHZhcmthcHBhOiLPsCIsdmFybm90aGluZzoi4oiFIix2YXJwaGk6Is+VIix2YXJwaToiz5YiLHZhcnByb3B0bzoi4oidIix2QXJyOiLih5UiLHZhcnI6IuKGlSIsdmFycmhvOiLPsSIsdmFyc2lnbWE6Is+CIix2YXJzdWJzZXRuZXE6IuKKiu+4gCIsdmFyc3Vic2V0bmVxcToi4quL77iAIix2YXJzdXBzZXRuZXE6IuKKi++4gCIsdmFyc3Vwc2V0bmVxcToi4quM77iAIix2YXJ0aGV0YToiz5EiLHZhcnRyaWFuZ2xlbGVmdDoi4oqyIix2YXJ0cmlhbmdsZXJpZ2h0OiLiirMiLFZiYXI6IuKrqyIsdkJhcjoi4quoIix2QmFydjoi4qupIixWY3k6ItCSIix2Y3k6ItCyIixWRGFzaDoi4oqrIixWZGFzaDoi4oqpIix2RGFzaDoi4oqoIix2ZGFzaDoi4oqiIixWZGFzaGw6IuKrpiIsVmVlOiLii4EiLHZlZToi4oioIix2ZWViYXI6IuKKuyIsdmVlZXE6IuKJmiIsdmVsbGlwOiLii64iLFZlcmJhcjoi4oCWIix2ZXJiYXI6InwiLFZlcnQ6IuKAliIsdmVydDoifCIsVmVydGljYWxCYXI6IuKIoyIsVmVydGljYWxMaW5lOiJ8IixWZXJ0aWNhbFNlcGFyYXRvcjoi4p2YIixWZXJ0aWNhbFRpbGRlOiLiiYAiLFZlcnlUaGluU3BhY2U6IuKAiiIsVmZyOiLwnZSZIix2ZnI6IvCdlLMiLHZsdHJpOiLiirIiLHZuc3ViOiLiioLig5IiLHZuc3VwOiLiioPig5IiLFZvcGY6IvCdlY0iLHZvcGY6IvCdlaciLHZwcm9wOiLiiJ0iLHZydHJpOiLiirMiLFZzY3I6IvCdkrEiLHZzY3I6IvCdk4siLHZzdWJuRToi4quL77iAIix2c3VibmU6IuKKiu+4gCIsdnN1cG5FOiLiq4zvuIAiLHZzdXBuZToi4oqL77iAIixWdmRhc2g6IuKKqiIsdnppZ3phZzoi4qaaIixXY2lyYzoixbQiLHdjaXJjOiLFtSIsd2VkYmFyOiLiqZ8iLFdlZGdlOiLii4AiLHdlZGdlOiLiiKciLHdlZGdlcToi4omZIix3ZWllcnA6IuKEmCIsV2ZyOiLwnZSaIix3ZnI6IvCdlLQiLFdvcGY6IvCdlY4iLHdvcGY6IvCdlagiLHdwOiLihJgiLHdyOiLiiYAiLHdyZWF0aDoi4omAIixXc2NyOiLwnZKyIix3c2NyOiLwnZOMIix4Y2FwOiLii4IiLHhjaXJjOiLil68iLHhjdXA6IuKLgyIseGR0cmk6IuKWvSIsWGZyOiLwnZSbIix4ZnI6IvCdlLUiLHhoQXJyOiLin7oiLHhoYXJyOiLin7ciLFhpOiLOniIseGk6Is6+Iix4bEFycjoi4p+4Iix4bGFycjoi4p+1Iix4bWFwOiLin7wiLHhuaXM6IuKLuyIseG9kb3Q6IuKogCIsWG9wZjoi8J2VjyIseG9wZjoi8J2VqSIseG9wbHVzOiLiqIEiLHhvdGltZToi4qiCIix4ckFycjoi4p+5Iix4cmFycjoi4p+2IixYc2NyOiLwnZKzIix4c2NyOiLwnZONIix4c3FjdXA6IuKohiIseHVwbHVzOiLiqIQiLHh1dHJpOiLilrMiLHh2ZWU6IuKLgSIseHdlZGdlOiLii4AiLFlhY3V0ZToiw50iLHlhY3V0ZToiw70iLFlBY3k6ItCvIix5YWN5OiLRjyIsWWNpcmM6IsW2Iix5Y2lyYzoixbciLFljeToi0KsiLHljeToi0YsiLHllbjoiwqUiLFlmcjoi8J2UnCIseWZyOiLwnZS2IixZSWN5OiLQhyIseWljeToi0ZciLFlvcGY6IvCdlZAiLHlvcGY6IvCdlaoiLFlzY3I6IvCdkrQiLHlzY3I6IvCdk44iLFlVY3k6ItCuIix5dWN5OiLRjiIsWXVtbDoixbgiLHl1bWw6IsO/IixaYWN1dGU6IsW5Iix6YWN1dGU6IsW6IixaY2Fyb246IsW9Iix6Y2Fyb246IsW+IixaY3k6ItCXIix6Y3k6ItC3IixaZG90OiLFuyIsemRvdDoixbwiLHplZXRyZjoi4oSoIixaZXJvV2lkdGhTcGFjZToi4oCLIixaZXRhOiLOliIsemV0YToizrYiLFpmcjoi4oSoIix6ZnI6IvCdlLciLFpIY3k6ItCWIix6aGN5OiLQtiIsemlncmFycjoi4oedIixab3BmOiLihKQiLHpvcGY6IvCdlasiLFpzY3I6IvCdkrUiLHpzY3I6IvCdk48iLHp3ajoi4oCNIix6d25qOiLigIwifSksci5lbnRpdHlNYXA9ci5IVE1MX0VOVElUSUVTfSkobnUpO3ZhciBvcz17fSxHcj1SZSxmZT1kZSxzdT1BcixSZj1Hci5pc0hUTUxFc2NhcGFibGVSYXdUZXh0RWxlbWVudCxGZj1Hci5pc0hUTUxNaW1lVHlwZSxNZj1Hci5pc0hUTUxSYXdUZXh0RWxlbWVudCxibj1Hci5oYXNPd24saXU9R3IuTkFNRVNQQUNFLGF1PXN1LlBhcnNlRXJyb3IsT2Y9c3UuRE9NRXhjZXB0aW9uLENuPTAscnI9MSxIcj0yLFNuPTMsUXI9NCxXcj01LEVuPTYsdXM9NztmdW5jdGlvbiBvdSgpe31vdS5wcm90b3R5cGU9e3BhcnNlOmZ1bmN0aW9uKHIsZSx0KXt2YXIgbj10aGlzLmRvbUJ1aWxkZXI7bi5zdGFydERvY3VtZW50KCksY3UoZSxlPU9iamVjdC5jcmVhdGUobnVsbCkpLExmKHIsZSx0LG4sdGhpcy5lcnJvckhhbmRsZXIpLG4uZW5kRG9jdW1lbnQoKX19O3ZhciBFaT0vJiM/XHcrOz8vZztmdW5jdGlvbiBMZihyLGUsdCxuLHMpe3ZhciBpPUZmKG4ubWltZVR5cGUpO3IuaW5kZXhPZihmZS5VTklDT0RFX1JFUExBQ0VNRU5UX0NIQVJBQ1RFUik+PTAmJnMud2FybmluZygiVW5pY29kZSByZXBsYWNlbWVudCBjaGFyYWN0ZXIgZGV0ZWN0ZWQsIHNvdXJjZSBlbmNvZGluZyBpc3N1ZXM/Iik7ZnVuY3Rpb24gYShVKXtpZihVPjY1NTM1KXtVLT02NTUzNjt2YXIgc2U9NTUyOTYrKFU+PjEwKSxGPTU2MzIwKyhVJjEwMjMpO3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHNlLEYpfWVsc2UgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoVSl9ZnVuY3Rpb24gbyhVKXt2YXIgc2U9VVtVLmxlbmd0aC0xXT09PSI7Ij9VOlUrIjsiO2lmKCFpJiZzZSE9PVUpcmV0dXJuIHMuZXJyb3IoIkVudGl0eVJlZjogZXhwZWN0aW5nIDsiKSxVO3ZhciBGPWZlLlJlZmVyZW5jZS5leGVjKHNlKTtpZighRnx8RlswXS5sZW5ndGghPT1zZS5sZW5ndGgpcmV0dXJuIHMuZXJyb3IoImVudGl0eSBub3QgbWF0Y2hpbmcgUmVmZXJlbmNlIHByb2R1Y3Rpb246ICIrVSksVTt2YXIgVD1zZS5zbGljZSgxLC0xKTtyZXR1cm4gYm4odCxUKT90W1RdOlQuY2hhckF0KDApPT09IiMiP2EocGFyc2VJbnQoVC5zdWJzdHJpbmcoMSkucmVwbGFjZSgieCIsIjB4IikpKToocy5lcnJvcigiZW50aXR5IG5vdCBmb3VuZDoiK1UpLFUpfWZ1bmN0aW9uIHUoVSl7aWYoVT5iKXt2YXIgc2U9ci5zdWJzdHJpbmcoYixVKS5yZXBsYWNlKEVpLG8pO2cmJmYoYiksbi5jaGFyYWN0ZXJzKHNlLDAsVS1iKSxiPVV9fXZhciBsPTAsQT0wLGQ9L1xyXG4/fFxufCQvZyxnPW4ubG9jYXRvcjtmdW5jdGlvbiBmKFUsc2Upe2Zvcig7VT49QSYmKHNlPWQuZXhlYyhyKSk7KWw9QSxBPXNlLmluZGV4K3NlWzBdLmxlbmd0aCxnLmxpbmVOdW1iZXIrKztnLmNvbHVtbk51bWJlcj1VLWwrMX1mb3IodmFyIEM9W3tjdXJyZW50TlNNYXA6ZX1dLHA9W10sYj0wOzspe3RyeXt2YXIgbT1yLmluZGV4T2YoIjwiLGIpO2lmKG08MCl7aWYoIWkmJnAubGVuZ3RoPjApcmV0dXJuIHMuZmF0YWxFcnJvcigidW5jbG9zZWQgeG1sIHRhZyhzKTogIitwLmpvaW4oIiwgIikpO2lmKCFyLnN1YnN0cmluZyhiKS5tYXRjaCgvXlxzKiQvKSl7dmFyIEU9bi5kb2Msdz1FLmNyZWF0ZVRleHROb2RlKHIuc3Vic3RyaW5nKGIpKTtpZihFLmRvY3VtZW50RWxlbWVudClyZXR1cm4gcy5lcnJvcigiRXh0cmEgY29udGVudCBhdCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudCIpO0UuYXBwZW5kQ2hpbGQodyksbi5jdXJyZW50RWxlbWVudD13fXJldHVybn1pZihtPmIpe3ZhciBOPXIuc3Vic3RyaW5nKGIsbSk7IWkmJnAubGVuZ3RoPT09MCYmKE49Ti5yZXBsYWNlKG5ldyBSZWdFeHAoZmUuU19PUFQuc291cmNlLCJnIiksIiIpLE4mJnMuZXJyb3IoIlVuZXhwZWN0ZWQgY29udGVudCBvdXRzaWRlIHJvb3QgZWxlbWVudDogJyIrTisiJyIpKSx1KG0pfXN3aXRjaChyLmNoYXJBdChtKzEpKXtjYXNlIi8iOnZhciBoPXIuaW5kZXhPZigiPiIsbSsyKSxJPXIuc3Vic3RyaW5nKG0rMixoPjA/aDp2b2lkIDApO2lmKCFJKXJldHVybiBzLmZhdGFsRXJyb3IoImVuZCB0YWcgbmFtZSBtaXNzaW5nIik7dmFyIFI9aD4wJiZmZS5yZWcoIl4iLGZlLlFOYW1lX2dyb3VwLGZlLlNfT1BULCIkIikuZXhlYyhJKTtpZighUilyZXR1cm4gcy5mYXRhbEVycm9yKCdlbmQgdGFnIG5hbWUgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzOiAiJytJKyciJyk7aWYoIW4uY3VycmVudEVsZW1lbnQmJiFuLmRvYy5kb2N1bWVudEVsZW1lbnQpcmV0dXJuO3ZhciBNPXBbcC5sZW5ndGgtMV18fG4uY3VycmVudEVsZW1lbnQudGFnTmFtZXx8bi5kb2MuZG9jdW1lbnRFbGVtZW50LnRhZ05hbWV8fCIiO2lmKE0hPT1SWzFdKXt2YXIgVz1SWzFdLnRvTG93ZXJDYXNlKCk7aWYoIWl8fE0udG9Mb3dlckNhc2UoKSE9PVcpcmV0dXJuIHMuZmF0YWxFcnJvcignT3BlbmluZyBhbmQgZW5kaW5nIHRhZyBtaXNtYXRjaDogIicrTSsnIiAhPSAiJytJKyciJyl9dmFyIE89Qy5wb3AoKTtwLnBvcCgpO3ZhciBWPU8ubG9jYWxOU01hcDtpZihuLmVuZEVsZW1lbnQoTy51cmksTy5sb2NhbE5hbWUsTSksVilmb3IodmFyIFggaW4gVilibihWLFgpJiZuLmVuZFByZWZpeE1hcHBpbmcoWCk7aCsrO2JyZWFrO2Nhc2UiPyI6ZyYmZihtKSxoPUhmKHIsbSxuLHMpO2JyZWFrO2Nhc2UiISI6ZyYmZihtKSxoPUF1KHIsbSxuLHMsaSk7YnJlYWs7ZGVmYXVsdDpnJiZmKG0pO3ZhciB2PW5ldyBkdSxQPUNbQy5sZW5ndGgtMV0uY3VycmVudE5TTWFwLGg9UGYocixtLHYsUCxvLHMsaSksRz12Lmxlbmd0aDtpZih2LmNsb3NlZHx8KGkmJkdyLmlzSFRNTFZvaWRFbGVtZW50KHYudGFnTmFtZSk/di5jbG9zZWQ9ITA6cC5wdXNoKHYudGFnTmFtZSkpLGcmJkcpe2Zvcih2YXIgaGU9dXUoZyx7fSksSz0wO0s8RztLKyspe3ZhciBBZT12W0tdO2YoQWUub2Zmc2V0KSxBZS5sb2NhdG9yPXV1KGcse30pfW4ubG9jYXRvcj1oZSxsdSh2LG4sUCkmJkMucHVzaCh2KSxuLmxvY2F0b3I9Z31lbHNlIGx1KHYsbixQKSYmQy5wdXNoKHYpO2kmJiF2LmNsb3NlZD9oPVVmKHIsaCx2LnRhZ05hbWUsbyxuKTpoKyt9fWNhdGNoKFUpe2lmKFUgaW5zdGFuY2VvZiBhdSl0aHJvdyBVO2lmKFUgaW5zdGFuY2VvZiBPZil0aHJvdyBuZXcgYXUoVS5uYW1lKyI6ICIrVS5tZXNzYWdlLG4ubG9jYXRvcixVKTtzLmVycm9yKCJlbGVtZW50IHBhcnNlIGVycm9yOiAiK1UpLGg9LTF9aD5iP2I9aDp1KE1hdGgubWF4KG0sYikrMSl9fWZ1bmN0aW9uIHV1KHIsZSl7cmV0dXJuIGUubGluZU51bWJlcj1yLmxpbmVOdW1iZXIsZS5jb2x1bW5OdW1iZXI9ci5jb2x1bW5OdW1iZXIsZX1mdW5jdGlvbiBQZihyLGUsdCxuLHMsaSxhKXtmdW5jdGlvbiBvKGYsQyxwKXtpZihibih0LmF0dHJpYnV0ZU5hbWVzLGYpKXJldHVybiBpLmZhdGFsRXJyb3IoIkF0dHJpYnV0ZSAiK2YrIiByZWRlZmluZWQiKTtpZighYSYmQy5pbmRleE9mKCI8Iik+PTApcmV0dXJuIGkuZmF0YWxFcnJvcigiVW5lc2NhcGVkICc8JyBub3QgYWxsb3dlZCBpbiBhdHRyaWJ1dGVzIHZhbHVlcyIpO3QuYWRkVmFsdWUoZixDLnJlcGxhY2UoL1tcdFxuXHJdL2csIiAiKS5yZXBsYWNlKEVpLHMpLHApfWZvcih2YXIgdSxsLEE9KytlLGQ9Q247Oyl7dmFyIGc9ci5jaGFyQXQoQSk7c3dpdGNoKGcpe2Nhc2UiPSI6aWYoZD09PXJyKXU9ci5zbGljZShlLEEpLGQ9U247ZWxzZSBpZihkPT09SHIpZD1TbjtlbHNlIHRocm93IG5ldyBFcnJvcigiYXR0cmlidXRlIGVxdWFsIG11c3QgYWZ0ZXIgYXR0ck5hbWUiKTticmVhaztjYXNlIiciOmNhc2UnIic6aWYoZD09PVNufHxkPT09cnIpaWYoZD09PXJyJiYoaS53YXJuaW5nKCdhdHRyaWJ1dGUgdmFsdWUgbXVzdCBhZnRlciAiPSInKSx1PXIuc2xpY2UoZSxBKSksZT1BKzEsQT1yLmluZGV4T2YoZyxlKSxBPjApbD1yLnNsaWNlKGUsQSksbyh1LGwsZS0xKSxkPVdyO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJhdHRyaWJ1dGUgdmFsdWUgbm8gZW5kICciK2crIicgbWF0Y2giKTtlbHNlIGlmKGQ9PVFyKWw9ci5zbGljZShlLEEpLG8odSxsLGUpLGkud2FybmluZygnYXR0cmlidXRlICInK3UrJyIgbWlzc2VkIHN0YXJ0IHF1b3QoJytnKyIpISEiKSxlPUErMSxkPVdyO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCdhdHRyaWJ1dGUgdmFsdWUgbXVzdCBhZnRlciAiPSInKTticmVhaztjYXNlIi8iOnN3aXRjaChkKXtjYXNlIENuOnQuc2V0VGFnTmFtZShyLnNsaWNlKGUsQSkpO2Nhc2UgV3I6Y2FzZSBFbjpjYXNlIHVzOmQ9dXMsdC5jbG9zZWQ9ITA7Y2FzZSBRcjpjYXNlIHJyOmJyZWFrO2Nhc2UgSHI6dC5jbG9zZWQ9ITA7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImF0dHJpYnV0ZSBpbnZhbGlkIGNsb3NlIGNoYXIoJy8nKSIpfWJyZWFrO2Nhc2UiIjpyZXR1cm4gaS5lcnJvcigidW5leHBlY3RlZCBlbmQgb2YgaW5wdXQiKSxkPT1DbiYmdC5zZXRUYWdOYW1lKHIuc2xpY2UoZSxBKSksQTtjYXNlIj4iOnN3aXRjaChkKXtjYXNlIENuOnQuc2V0VGFnTmFtZShyLnNsaWNlKGUsQSkpO2Nhc2UgV3I6Y2FzZSBFbjpjYXNlIHVzOmJyZWFrO2Nhc2UgUXI6Y2FzZSBycjpsPXIuc2xpY2UoZSxBKSxsLnNsaWNlKC0xKT09PSIvIiYmKHQuY2xvc2VkPSEwLGw9bC5zbGljZSgwLC0xKSk7Y2FzZSBIcjpkPT09SHImJihsPXUpLGQ9PVFyPyhpLndhcm5pbmcoJ2F0dHJpYnV0ZSAiJytsKyciIG1pc3NlZCBxdW90KCIpIScpLG8odSxsLGUpKTooYXx8aS53YXJuaW5nKCdhdHRyaWJ1dGUgIicrbCsnIiBtaXNzZWQgdmFsdWUhISAiJytsKyciIGluc3RlYWQhIScpLG8obCxsLGUpKTticmVhaztjYXNlIFNuOmlmKCFhKXJldHVybiBpLmZhdGFsRXJyb3IoYEF0dFZhbHVlOiAnIG9yICIgZXhwZWN0ZWRgKX1yZXR1cm4gQTtjYXNlIsKAIjpnPSIgIjtkZWZhdWx0OmlmKGc8PSIgIilzd2l0Y2goZCl7Y2FzZSBDbjp0LnNldFRhZ05hbWUoci5zbGljZShlLEEpKSxkPUVuO2JyZWFrO2Nhc2UgcnI6dT1yLnNsaWNlKGUsQSksZD1IcjticmVhaztjYXNlIFFyOnZhciBsPXIuc2xpY2UoZSxBKTtpLndhcm5pbmcoJ2F0dHJpYnV0ZSAiJytsKyciIG1pc3NlZCBxdW90KCIpISEnKSxvKHUsbCxlKTtjYXNlIFdyOmQ9RW47YnJlYWt9ZWxzZSBzd2l0Y2goZCl7Y2FzZSBIcjphfHxpLndhcm5pbmcoJ2F0dHJpYnV0ZSAiJyt1KyciIG1pc3NlZCB2YWx1ZSEhICInK3UrJyIgaW5zdGVhZDIhIScpLG8odSx1LGUpLGU9QSxkPXJyO2JyZWFrO2Nhc2UgV3I6aS53YXJuaW5nKCdhdHRyaWJ1dGUgc3BhY2UgaXMgcmVxdWlyZWQiJyt1KyciISEnKTtjYXNlIEVuOmQ9cnIsZT1BO2JyZWFrO2Nhc2UgU246ZD1RcixlPUE7YnJlYWs7Y2FzZSB1czp0aHJvdyBuZXcgRXJyb3IoImVsZW1lbnRzIGNsb3NlZCBjaGFyYWN0ZXIgJy8nIGFuZCAnPicgbXVzdCBiZSBjb25uZWN0ZWQgdG8iKX19QSsrfX1mdW5jdGlvbiBsdShyLGUsdCl7Zm9yKHZhciBuPXIudGFnTmFtZSxzPW51bGwsZD1yLmxlbmd0aDtkLS07KXt2YXIgaT1yW2RdLGE9aS5xTmFtZSxvPWkudmFsdWUsZz1hLmluZGV4T2YoIjoiKTtpZihnPjApdmFyIHU9aS5wcmVmaXg9YS5zbGljZSgwLGcpLGw9YS5zbGljZShnKzEpLEE9dT09PSJ4bWxucyImJmw7ZWxzZSBsPWEsdT1udWxsLEE9YT09PSJ4bWxucyImJiIiO2kubG9jYWxOYW1lPWwsQSE9PSExJiYocz09bnVsbCYmKHM9T2JqZWN0LmNyZWF0ZShudWxsKSxjdSh0LHQ9T2JqZWN0LmNyZWF0ZShudWxsKSkpLHRbQV09c1tBXT1vLGkudXJpPWl1LlhNTE5TLGUuc3RhcnRQcmVmaXhNYXBwaW5nKEEsbykpfWZvcih2YXIgZD1yLmxlbmd0aDtkLS07KWk9cltkXSxpLnByZWZpeCYmKGkucHJlZml4PT09InhtbCImJihpLnVyaT1pdS5YTUwpLGkucHJlZml4IT09InhtbG5zIiYmKGkudXJpPXRbaS5wcmVmaXhdKSk7dmFyIGc9bi5pbmRleE9mKCI6Iik7Zz4wPyh1PXIucHJlZml4PW4uc2xpY2UoMCxnKSxsPXIubG9jYWxOYW1lPW4uc2xpY2UoZysxKSk6KHU9bnVsbCxsPXIubG9jYWxOYW1lPW4pO3ZhciBmPXIudXJpPXRbdXx8IiJdO2lmKGUuc3RhcnRFbGVtZW50KGYsbCxuLHIpLHIuY2xvc2VkKXtpZihlLmVuZEVsZW1lbnQoZixsLG4pLHMpZm9yKHUgaW4gcylibihzLHUpJiZlLmVuZFByZWZpeE1hcHBpbmcodSl9ZWxzZSByZXR1cm4gci5jdXJyZW50TlNNYXA9dCxyLmxvY2FsTlNNYXA9cywhMH1mdW5jdGlvbiBVZihyLGUsdCxuLHMpe3ZhciBpPVJmKHQpO2lmKGl8fE1mKHQpKXt2YXIgYT1yLmluZGV4T2YoIjwvIit0KyI+IixlKSxvPXIuc3Vic3RyaW5nKGUrMSxhKTtyZXR1cm4gaSYmKG89by5yZXBsYWNlKEVpLG4pKSxzLmNoYXJhY3RlcnMobywwLG8ubGVuZ3RoKSxhfXJldHVybiBlKzF9ZnVuY3Rpb24gY3UocixlKXtmb3IodmFyIHQgaW4gcilibihyLHQpJiYoZVt0XT1yW3RdKX1mdW5jdGlvbiBodShyLGUpe3ZhciB0PWU7ZnVuY3Rpb24gbihBKXtyZXR1cm4gQT1BfHwwLHIuY2hhckF0KHQrQSl9ZnVuY3Rpb24gcyhBKXtBPUF8fDEsdCs9QX1mdW5jdGlvbiBpKCl7Zm9yKHZhciBBPTA7dDxyLmxlbmd0aDspe3ZhciBkPW4oKTtpZihkIT09IiAiJiZkIT09YApgJiZkIT09IgkiJiZkIT09IlxyIilyZXR1cm4gQTtBKysscygpfXJldHVybi0xfWZ1bmN0aW9uIGEoKXtyZXR1cm4gci5zdWJzdHJpbmcodCl9ZnVuY3Rpb24gbyhBKXtyZXR1cm4gci5zdWJzdHJpbmcodCx0K0EubGVuZ3RoKT09PUF9ZnVuY3Rpb24gdShBKXtyZXR1cm4gci5zdWJzdHJpbmcodCx0K0EubGVuZ3RoKS50b1VwcGVyQ2FzZSgpPT09QS50b1VwcGVyQ2FzZSgpfWZ1bmN0aW9uIGwoQSl7dmFyIGQ9ZmUucmVnKCJeIixBKSxnPWQuZXhlYyhhKCkpO3JldHVybiBnPyhzKGdbMF0ubGVuZ3RoKSxnWzBdKTpudWxsfXJldHVybntjaGFyOm4sZ2V0SW5kZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZ2V0TWF0Y2g6bCxnZXRTb3VyY2U6ZnVuY3Rpb24oKXtyZXR1cm4gcn0sc2tpcDpzLHNraXBCbGFua3M6aSxzdWJzdHJpbmdGcm9tSW5kZXg6YSxzdWJzdHJpbmdTdGFydHNXaXRoOm8sc3Vic3RyaW5nU3RhcnRzV2l0aENhc2VJbnNlbnNpdGl2ZTp1fX1mdW5jdGlvbiBHZihyLGUpe2Z1bmN0aW9uIHQobyx1KXt2YXIgbD1mZS5QSS5leGVjKG8uc3Vic3RyaW5nRnJvbUluZGV4KCkpO3JldHVybiBsP2xbMV0udG9Mb3dlckNhc2UoKT09PSJ4bWwiP3UuZmF0YWxFcnJvcigieG1sIGRlY2xhcmF0aW9uIGlzIG9ubHkgYWxsb3dlZCBhdCB0aGUgc3RhcnQgb2YgdGhlIGRvY3VtZW50LCBidXQgZm91bmQgYXQgcG9zaXRpb24gIitvLmdldEluZGV4KCkpOihvLnNraXAobFswXS5sZW5ndGgpLGxbMF0pOnUuZmF0YWxFcnJvcigicHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBpcyBub3Qgd2VsbC1mb3JtZWQgYXQgcG9zaXRpb24gIitvLmdldEluZGV4KCkpfXZhciBuPXIuZ2V0U291cmNlKCk7aWYoci5jaGFyKCk9PT0iWyIpe3Iuc2tpcCgxKTtmb3IodmFyIHM9ci5nZXRJbmRleCgpO3IuZ2V0SW5kZXgoKTxuLmxlbmd0aDspe2lmKHIuc2tpcEJsYW5rcygpLHIuY2hhcigpPT09Il0iKXt2YXIgaT1uLnN1YnN0cmluZyhzLHIuZ2V0SW5kZXgoKSk7cmV0dXJuIHIuc2tpcCgxKSxpfXZhciBhPW51bGw7aWYoci5jaGFyKCk9PT0iPCImJnIuY2hhcigxKT09PSIhIilzd2l0Y2goci5jaGFyKDIpKXtjYXNlIkUiOnIuY2hhcigzKT09PSJMIj9hPXIuZ2V0TWF0Y2goZmUuZWxlbWVudGRlY2wpOnIuY2hhcigzKT09PSJOIiYmKGE9ci5nZXRNYXRjaChmZS5FbnRpdHlEZWNsKSk7YnJlYWs7Y2FzZSJBIjphPXIuZ2V0TWF0Y2goZmUuQXR0bGlzdERlY2wpO2JyZWFrO2Nhc2UiTiI6YT1yLmdldE1hdGNoKGZlLk5vdGF0aW9uRGVjbCk7YnJlYWs7Y2FzZSItIjphPXIuZ2V0TWF0Y2goZmUuQ29tbWVudCk7YnJlYWt9ZWxzZSBpZihyLmNoYXIoKT09PSI8IiYmci5jaGFyKDEpPT09Ij8iKWE9dChyLGUpO2Vsc2UgaWYoci5jaGFyKCk9PT0iJSIpYT1yLmdldE1hdGNoKGZlLlBFUmVmZXJlbmNlKTtlbHNlIHJldHVybiBlLmZhdGFsRXJyb3IoIkVycm9yIGRldGVjdGVkIGluIE1hcmt1cCBkZWNsYXJhdGlvbiIpO2lmKCFhKXJldHVybiBlLmZhdGFsRXJyb3IoIkVycm9yIGluIGludGVybmFsIHN1YnNldCBhdCBwb3NpdGlvbiAiK3IuZ2V0SW5kZXgoKSl9cmV0dXJuIGUuZmF0YWxFcnJvcigiZG9jdHlwZSBpbnRlcm5hbCBzdWJzZXQgaXMgbm90IHdlbGwtZm9ybWVkLCBtaXNzaW5nIF0iKX19ZnVuY3Rpb24gQXUocixlLHQsbixzKXt2YXIgaT1odShyLGUpO3N3aXRjaChzP2kuY2hhcigyKS50b1VwcGVyQ2FzZSgpOmkuY2hhcigyKSl7Y2FzZSItIjp2YXIgYT1pLmdldE1hdGNoKGZlLkNvbW1lbnQpO3JldHVybiBhPyh0LmNvbW1lbnQoYSxmZS5DT01NRU5UX1NUQVJULmxlbmd0aCxhLmxlbmd0aC1mZS5DT01NRU5UX1NUQVJULmxlbmd0aC1mZS5DT01NRU5UX0VORC5sZW5ndGgpLGkuZ2V0SW5kZXgoKSk6bi5mYXRhbEVycm9yKCJjb21tZW50IGlzIG5vdCB3ZWxsLWZvcm1lZCBhdCBwb3NpdGlvbiAiK2kuZ2V0SW5kZXgoKSk7Y2FzZSJbIjp2YXIgbz1pLmdldE1hdGNoKGZlLkNEU2VjdCk7cmV0dXJuIG8/IXMmJiF0LmN1cnJlbnRFbGVtZW50P24uZmF0YWxFcnJvcigiQ0RBVEEgb3V0c2lkZSBvZiBlbGVtZW50Iik6KHQuc3RhcnRDREFUQSgpLHQuY2hhcmFjdGVycyhvLGZlLkNEQVRBX1NUQVJULmxlbmd0aCxvLmxlbmd0aC1mZS5DREFUQV9TVEFSVC5sZW5ndGgtZmUuQ0RBVEFfRU5ELmxlbmd0aCksdC5lbmRDREFUQSgpLGkuZ2V0SW5kZXgoKSk6bi5mYXRhbEVycm9yKCJJbnZhbGlkIENEQVRBIHN0YXJ0aW5nIGF0IHBvc2l0aW9uICIrZSk7Y2FzZSJEIjp7aWYodC5kb2MmJnQuZG9jLmRvY3VtZW50RWxlbWVudClyZXR1cm4gbi5mYXRhbEVycm9yKCJEb2N0eXBlIG5vdCBhbGxvd2VkIGluc2lkZSBvciBhZnRlciBkb2N1bWVudEVsZW1lbnQgYXQgcG9zaXRpb24gIitpLmdldEluZGV4KCkpO2lmKHM/IWkuc3Vic3RyaW5nU3RhcnRzV2l0aENhc2VJbnNlbnNpdGl2ZShmZS5ET0NUWVBFX0RFQ0xfU1RBUlQpOiFpLnN1YnN0cmluZ1N0YXJ0c1dpdGgoZmUuRE9DVFlQRV9ERUNMX1NUQVJUKSlyZXR1cm4gbi5mYXRhbEVycm9yKCJFeHBlY3RlZCAiK2ZlLkRPQ1RZUEVfREVDTF9TVEFSVCsiIGF0IHBvc2l0aW9uICIraS5nZXRJbmRleCgpKTtpZihpLnNraXAoZmUuRE9DVFlQRV9ERUNMX1NUQVJULmxlbmd0aCksaS5za2lwQmxhbmtzKCk8MSlyZXR1cm4gbi5mYXRhbEVycm9yKCJFeHBlY3RlZCB3aGl0ZXNwYWNlIGFmdGVyICIrZmUuRE9DVFlQRV9ERUNMX1NUQVJUKyIgYXQgcG9zaXRpb24gIitpLmdldEluZGV4KCkpO3ZhciB1PXtuYW1lOnZvaWQgMCxwdWJsaWNJZDp2b2lkIDAsc3lzdGVtSWQ6dm9pZCAwLGludGVybmFsU3Vic2V0OnZvaWQgMH07aWYodS5uYW1lPWkuZ2V0TWF0Y2goZmUuTmFtZSksIXUubmFtZSlyZXR1cm4gbi5mYXRhbEVycm9yKCJkb2N0eXBlIG5hbWUgbWlzc2luZyBvciBjb250YWlucyB1bmV4cGVjdGVkIGNoYXJhY3RlcnMgYXQgcG9zaXRpb24gIitpLmdldEluZGV4KCkpO2lmKHMmJnUubmFtZS50b0xvd2VyQ2FzZSgpIT09Imh0bWwiJiZuLndhcm5pbmcoIlVuZXhwZWN0ZWQgRE9DVFlQRSBpbiBIVE1MIGRvY3VtZW50IGF0IHBvc2l0aW9uICIraS5nZXRJbmRleCgpKSxpLnNraXBCbGFua3MoKSxpLnN1YnN0cmluZ1N0YXJ0c1dpdGgoZmUuUFVCTElDKXx8aS5zdWJzdHJpbmdTdGFydHNXaXRoKGZlLlNZU1RFTSkpe3ZhciBsPWZlLkV4dGVybmFsSURfbWF0Y2guZXhlYyhpLnN1YnN0cmluZ0Zyb21JbmRleCgpKTtpZighbClyZXR1cm4gbi5mYXRhbEVycm9yKCJkb2N0eXBlIGV4dGVybmFsIGlkIGlzIG5vdCB3ZWxsLWZvcm1lZCBhdCBwb3NpdGlvbiAiK2kuZ2V0SW5kZXgoKSk7bC5ncm91cHMuU3lzdGVtTGl0ZXJhbE9ubHkhPT12b2lkIDA/dS5zeXN0ZW1JZD1sLmdyb3Vwcy5TeXN0ZW1MaXRlcmFsT25seToodS5zeXN0ZW1JZD1sLmdyb3Vwcy5TeXN0ZW1MaXRlcmFsLHUucHVibGljSWQ9bC5ncm91cHMuUHViaWRMaXRlcmFsKSxpLnNraXAobFswXS5sZW5ndGgpfWVsc2UgaWYocyYmaS5zdWJzdHJpbmdTdGFydHNXaXRoQ2FzZUluc2Vuc2l0aXZlKGZlLlNZU1RFTSkpe2lmKGkuc2tpcChmZS5TWVNURU0ubGVuZ3RoKSxpLnNraXBCbGFua3MoKTwxKXJldHVybiBuLmZhdGFsRXJyb3IoIkV4cGVjdGVkIHdoaXRlc3BhY2UgYWZ0ZXIgIitmZS5TWVNURU0rIiBhdCBwb3NpdGlvbiAiK2kuZ2V0SW5kZXgoKSk7aWYodS5zeXN0ZW1JZD1pLmdldE1hdGNoKGZlLkFCT1VUX0xFR0FDWV9DT01QQVRfU3lzdGVtTGl0ZXJhbCksIXUuc3lzdGVtSWQpcmV0dXJuIG4uZmF0YWxFcnJvcigiRXhwZWN0ZWQgIitmZS5BQk9VVF9MRUdBQ1lfQ09NUEFUKyIgaW4gc2luZ2xlIG9yIGRvdWJsZSBxdW90ZXMgYWZ0ZXIgIitmZS5TWVNURU0rIiBhdCBwb3NpdGlvbiAiK2kuZ2V0SW5kZXgoKSl9cmV0dXJuIHMmJnUuc3lzdGVtSWQmJiFmZS5BQk9VVF9MRUdBQ1lfQ09NUEFUX1N5c3RlbUxpdGVyYWwudGVzdCh1LnN5c3RlbUlkKSYmbi53YXJuaW5nKCJVbmV4cGVjdGVkIGRvY3R5cGUuc3lzdGVtSWQgaW4gSFRNTCBkb2N1bWVudCBhdCBwb3NpdGlvbiAiK2kuZ2V0SW5kZXgoKSksc3x8KGkuc2tpcEJsYW5rcygpLHUuaW50ZXJuYWxTdWJzZXQ9R2YoaSxuKSksaS5za2lwQmxhbmtzKCksaS5jaGFyKCkhPT0iPiI/bi5mYXRhbEVycm9yKCJkb2N0eXBlIG5vdCB0ZXJtaW5hdGVkIHdpdGggPiBhdCBwb3NpdGlvbiAiK2kuZ2V0SW5kZXgoKSk6KGkuc2tpcCgxKSx0LnN0YXJ0RFREKHUubmFtZSx1LnB1YmxpY0lkLHUuc3lzdGVtSWQsdS5pbnRlcm5hbFN1YnNldCksdC5lbmREVEQoKSxpLmdldEluZGV4KCkpfWRlZmF1bHQ6cmV0dXJuIG4uZmF0YWxFcnJvcignTm90IHdlbGwtZm9ybWVkIFhNTCBzdGFydGluZyB3aXRoICI8ISIgYXQgcG9zaXRpb24gJytlKX19ZnVuY3Rpb24gSGYocixlLHQsbil7dmFyIHM9ci5zdWJzdHJpbmcoZSkubWF0Y2goZmUuUEkpO2lmKCFzKXJldHVybiBuLmZhdGFsRXJyb3IoIkludmFsaWQgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBzdGFydGluZyBhdCBwb3NpdGlvbiAiK2UpO2lmKHNbMV0udG9Mb3dlckNhc2UoKT09PSJ4bWwiKXtpZihlPjApcmV0dXJuIG4uZmF0YWxFcnJvcigicHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBhdCBwb3NpdGlvbiAiK2UrIiBpcyBhbiB4bWwgZGVjbGFyYXRpb24gd2hpY2ggaXMgb25seSBhdCB0aGUgc3RhcnQgb2YgdGhlIGRvY3VtZW50Iik7aWYoIWZlLlhNTERlY2wudGVzdChyLnN1YnN0cmluZyhlKSkpcmV0dXJuIG4uZmF0YWxFcnJvcigieG1sIGRlY2xhcmF0aW9uIGlzIG5vdCB3ZWxsLWZvcm1lZCIpfXJldHVybiB0LnByb2Nlc3NpbmdJbnN0cnVjdGlvbihzWzFdLHNbMl0pLGUrc1swXS5sZW5ndGh9ZnVuY3Rpb24gZHUoKXt0aGlzLmF0dHJpYnV0ZU5hbWVzPU9iamVjdC5jcmVhdGUobnVsbCl9ZHUucHJvdG90eXBlPXtzZXRUYWdOYW1lOmZ1bmN0aW9uKHIpe2lmKCFmZS5RTmFtZV9leGFjdC50ZXN0KHIpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCB0YWdOYW1lOiIrcik7dGhpcy50YWdOYW1lPXJ9LGFkZFZhbHVlOmZ1bmN0aW9uKHIsZSx0KXtpZighZmUuUU5hbWVfZXhhY3QudGVzdChyKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgYXR0cmlidXRlOiIrcik7dGhpcy5hdHRyaWJ1dGVOYW1lc1tyXT10aGlzLmxlbmd0aCx0aGlzW3RoaXMubGVuZ3RoKytdPXtxTmFtZTpyLHZhbHVlOmUsb2Zmc2V0OnR9fSxsZW5ndGg6MCxnZXRMb2NhbE5hbWU6ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXNbcl0ubG9jYWxOYW1lfSxnZXRMb2NhdG9yOmZ1bmN0aW9uKHIpe3JldHVybiB0aGlzW3JdLmxvY2F0b3J9LGdldFFOYW1lOmZ1bmN0aW9uKHIpe3JldHVybiB0aGlzW3JdLnFOYW1lfSxnZXRVUkk6ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXNbcl0udXJpfSxnZXRWYWx1ZTpmdW5jdGlvbihyKXtyZXR1cm4gdGhpc1tyXS52YWx1ZX19LG9zLlhNTFJlYWRlcj1vdSxvcy5wYXJzZVV0aWxzPWh1LG9zLnBhcnNlRG9jdHlwZUNvbW1lbnRPckNEYXRhPUF1O3ZhciBmcj1SZSxRZj1UZSxXZj1BcixmdT1udSxLZj1vcyxZZj1RZi5ET01JbXBsZW1lbnRhdGlvbixaZj1mci5oYXNEZWZhdWx0SFRNTE5hbWVzcGFjZSxWZj1mci5pc0hUTUxNaW1lVHlwZSx6Zj1mci5pc1ZhbGlkTWltZVR5cGUscHU9ZnIuTUlNRV9UWVBFLHlpPWZyLk5BTUVTUEFDRSxndT1XZi5QYXJzZUVycm9yLEpmPUtmLlhNTFJlYWRlcjtmdW5jdGlvbiBtdShyKXtyZXR1cm4gci5yZXBsYWNlKC9ccltcblx1MDA4NV0vZyxgCmApLnJlcGxhY2UoL1tcclx1MDA4NVx1MjAyOFx1MjAyOV0vZyxgCmApfWZ1bmN0aW9uIGJ1KHIpe2lmKHI9cnx8e30sci5sb2NhdG9yPT09dm9pZCAwJiYoci5sb2NhdG9yPSEwKSx0aGlzLmFzc2lnbj1yLmFzc2lnbnx8ZnIuYXNzaWduLHRoaXMuZG9tSGFuZGxlcj1yLmRvbUhhbmRsZXJ8fGxzLHRoaXMub25FcnJvcj1yLm9uRXJyb3J8fHIuZXJyb3JIYW5kbGVyLHIuZXJyb3JIYW5kbGVyJiZ0eXBlb2Ygci5lcnJvckhhbmRsZXIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXJyb3JIYW5kbGVyIG9iamVjdCBpcyBubyBsb25nZXIgc3VwcG9ydGVkLCBzd2l0Y2ggdG8gb25FcnJvciEiKTtyLmVycm9ySGFuZGxlciYmci5lcnJvckhhbmRsZXIoIndhcm5pbmciLCJUaGUgYGVycm9ySGFuZGxlcmAgb3B0aW9uIGhhcyBiZWVuIGRlcHJlY2F0ZWQsIHVzZSBgb25FcnJvcmAgaW5zdGVhZCEiLHRoaXMpLHRoaXMubm9ybWFsaXplTGluZUVuZGluZ3M9ci5ub3JtYWxpemVMaW5lRW5kaW5nc3x8bXUsdGhpcy5sb2NhdG9yPSEhci5sb2NhdG9yLHRoaXMueG1sbnM9dGhpcy5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSxyLnhtbG5zKX1idS5wcm90b3R5cGUucGFyc2VGcm9tU3RyaW5nPWZ1bmN0aW9uKHIsZSl7aWYoIXpmKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ0RPTVBhcnNlci5wYXJzZUZyb21TdHJpbmc6IHRoZSBwcm92aWRlZCBtaW1lVHlwZSAiJytlKyciIGlzIG5vdCB2YWxpZC4nKTt2YXIgdD10aGlzLmFzc2lnbihPYmplY3QuY3JlYXRlKG51bGwpLHRoaXMueG1sbnMpLG49ZnUuWE1MX0VOVElUSUVTLHM9dFsiIl18fG51bGw7WmYoZSk/KG49ZnUuSFRNTF9FTlRJVElFUyxzPXlpLkhUTUwpOmU9PT1wdS5YTUxfU1ZHX0lNQUdFJiYocz15aS5TVkcpLHRbIiJdPXMsdC54bWw9dC54bWx8fHlpLlhNTDt2YXIgaT1uZXcgdGhpcy5kb21IYW5kbGVyKHttaW1lVHlwZTplLGRlZmF1bHROYW1lc3BhY2U6cyxvbkVycm9yOnRoaXMub25FcnJvcn0pLGE9dGhpcy5sb2NhdG9yP3t9OnZvaWQgMDt0aGlzLmxvY2F0b3ImJmkuc2V0RG9jdW1lbnRMb2NhdG9yKGEpO3ZhciBvPW5ldyBKZjtvLmVycm9ySGFuZGxlcj1pLG8uZG9tQnVpbGRlcj1pO3ZhciB1PSFmci5pc0hUTUxNaW1lVHlwZShlKTtyZXR1cm4gdSYmdHlwZW9mIHIhPSJzdHJpbmciJiZvLmVycm9ySGFuZGxlci5mYXRhbEVycm9yKCJzb3VyY2UgaXMgbm90IGEgc3RyaW5nIiksby5wYXJzZSh0aGlzLm5vcm1hbGl6ZUxpbmVFbmRpbmdzKFN0cmluZyhyKSksdCxuKSxpLmRvYy5kb2N1bWVudEVsZW1lbnR8fG8uZXJyb3JIYW5kbGVyLmZhdGFsRXJyb3IoIm1pc3Npbmcgcm9vdCBlbGVtZW50IiksaS5kb2N9O2Z1bmN0aW9uIGxzKHIpe3ZhciBlPXJ8fHt9O3RoaXMubWltZVR5cGU9ZS5taW1lVHlwZXx8cHUuWE1MX0FQUExJQ0FUSU9OLHRoaXMuZGVmYXVsdE5hbWVzcGFjZT1lLmRlZmF1bHROYW1lc3BhY2V8fG51bGwsdGhpcy5jZGF0YT0hMSx0aGlzLmN1cnJlbnRFbGVtZW50PXZvaWQgMCx0aGlzLmRvYz12b2lkIDAsdGhpcy5sb2NhdG9yPXZvaWQgMCx0aGlzLm9uRXJyb3I9ZS5vbkVycm9yfWZ1bmN0aW9uIEtyKHIsZSl7ZS5saW5lTnVtYmVyPXIubGluZU51bWJlcixlLmNvbHVtbk51bWJlcj1yLmNvbHVtbk51bWJlcn1scy5wcm90b3R5cGU9e3N0YXJ0RG9jdW1lbnQ6ZnVuY3Rpb24oKXt2YXIgcj1uZXcgWWY7dGhpcy5kb2M9VmYodGhpcy5taW1lVHlwZSk/ci5jcmVhdGVIVE1MRG9jdW1lbnQoITEpOnIuY3JlYXRlRG9jdW1lbnQodGhpcy5kZWZhdWx0TmFtZXNwYWNlLCIiKX0sc3RhcnRFbGVtZW50OmZ1bmN0aW9uKHIsZSx0LG4pe3ZhciBzPXRoaXMuZG9jLGk9cy5jcmVhdGVFbGVtZW50TlMocix0fHxlKSxhPW4ubGVuZ3RoO2NzKHRoaXMsaSksdGhpcy5jdXJyZW50RWxlbWVudD1pLHRoaXMubG9jYXRvciYmS3IodGhpcy5sb2NhdG9yLGkpO2Zvcih2YXIgbz0wO288YTtvKyspe3ZhciByPW4uZ2V0VVJJKG8pLHU9bi5nZXRWYWx1ZShvKSx0PW4uZ2V0UU5hbWUobyksbD1zLmNyZWF0ZUF0dHJpYnV0ZU5TKHIsdCk7dGhpcy5sb2NhdG9yJiZLcihuLmdldExvY2F0b3IobyksbCksbC52YWx1ZT1sLm5vZGVWYWx1ZT11LGkuc2V0QXR0cmlidXRlTm9kZShsKX19LGVuZEVsZW1lbnQ6ZnVuY3Rpb24ocixlLHQpe3RoaXMuY3VycmVudEVsZW1lbnQ9dGhpcy5jdXJyZW50RWxlbWVudC5wYXJlbnROb2RlfSxzdGFydFByZWZpeE1hcHBpbmc6ZnVuY3Rpb24ocixlKXt9LGVuZFByZWZpeE1hcHBpbmc6ZnVuY3Rpb24ocil7fSxwcm9jZXNzaW5nSW5zdHJ1Y3Rpb246ZnVuY3Rpb24ocixlKXt2YXIgdD10aGlzLmRvYy5jcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24ocixlKTt0aGlzLmxvY2F0b3ImJktyKHRoaXMubG9jYXRvcix0KSxjcyh0aGlzLHQpfSxpZ25vcmFibGVXaGl0ZXNwYWNlOmZ1bmN0aW9uKHIsZSx0KXt9LGNoYXJhY3RlcnM6ZnVuY3Rpb24ocixlLHQpe2lmKHI9Q3UuYXBwbHkodGhpcyxhcmd1bWVudHMpLHIpe2lmKHRoaXMuY2RhdGEpdmFyIG49dGhpcy5kb2MuY3JlYXRlQ0RBVEFTZWN0aW9uKHIpO2Vsc2UgdmFyIG49dGhpcy5kb2MuY3JlYXRlVGV4dE5vZGUocik7dGhpcy5jdXJyZW50RWxlbWVudD90aGlzLmN1cnJlbnRFbGVtZW50LmFwcGVuZENoaWxkKG4pOi9eXHMqJC8udGVzdChyKSYmdGhpcy5kb2MuYXBwZW5kQ2hpbGQobiksdGhpcy5sb2NhdG9yJiZLcih0aGlzLmxvY2F0b3Isbil9fSxza2lwcGVkRW50aXR5OmZ1bmN0aW9uKHIpe30sZW5kRG9jdW1lbnQ6ZnVuY3Rpb24oKXt0aGlzLmRvYy5ub3JtYWxpemUoKX0sc2V0RG9jdW1lbnRMb2NhdG9yOmZ1bmN0aW9uKHIpe3ImJihyLmxpbmVOdW1iZXI9MCksdGhpcy5sb2NhdG9yPXJ9LGNvbW1lbnQ6ZnVuY3Rpb24ocixlLHQpe3I9Q3UuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBuPXRoaXMuZG9jLmNyZWF0ZUNvbW1lbnQocik7dGhpcy5sb2NhdG9yJiZLcih0aGlzLmxvY2F0b3IsbiksY3ModGhpcyxuKX0sc3RhcnRDREFUQTpmdW5jdGlvbigpe3RoaXMuY2RhdGE9ITB9LGVuZENEQVRBOmZ1bmN0aW9uKCl7dGhpcy5jZGF0YT0hMX0sc3RhcnREVEQ6ZnVuY3Rpb24ocixlLHQsbil7dmFyIHM9dGhpcy5kb2MuaW1wbGVtZW50YXRpb247aWYocyYmcy5jcmVhdGVEb2N1bWVudFR5cGUpe3ZhciBpPXMuY3JlYXRlRG9jdW1lbnRUeXBlKHIsZSx0LG4pO3RoaXMubG9jYXRvciYmS3IodGhpcy5sb2NhdG9yLGkpLGNzKHRoaXMsaSksdGhpcy5kb2MuZG9jdHlwZT1pfX0scmVwb3J0RXJyb3I6ZnVuY3Rpb24ocixlKXtpZih0eXBlb2YgdGhpcy5vbkVycm9yPT0iZnVuY3Rpb24iKXRyeXt0aGlzLm9uRXJyb3IocixlLHRoaXMpfWNhdGNoKHQpe3Rocm93IG5ldyBndSgiUmVwb3J0aW5nICIrcisnICInK2UrJyIgY2F1c2VkICcrdCx0aGlzLmxvY2F0b3IpfWVsc2UgY29uc29sZS5lcnJvcigiW3htbGRvbSAiK3IrIl0JIitlLHFmKHRoaXMubG9jYXRvcikpfSx3YXJuaW5nOmZ1bmN0aW9uKHIpe3RoaXMucmVwb3J0RXJyb3IoIndhcm5pbmciLHIpfSxlcnJvcjpmdW5jdGlvbihyKXt0aGlzLnJlcG9ydEVycm9yKCJlcnJvciIscil9LGZhdGFsRXJyb3I6ZnVuY3Rpb24ocil7dGhyb3cgdGhpcy5yZXBvcnRFcnJvcigiZmF0YWxFcnJvciIsciksbmV3IGd1KHIsdGhpcy5sb2NhdG9yKX19O2Z1bmN0aW9uIHFmKHIpe2lmKHIpcmV0dXJuYApAI1tsaW5lOmArci5saW5lTnVtYmVyKyIsY29sOiIrci5jb2x1bW5OdW1iZXIrIl0ifWZ1bmN0aW9uIEN1KHIsZSx0KXtyZXR1cm4gdHlwZW9mIHI9PSJzdHJpbmciP3Iuc3Vic3RyKGUsdCk6ci5sZW5ndGg+PWUrdHx8ZT9uZXcgamF2YS5sYW5nLlN0cmluZyhyLGUsdCkrIiI6cn0iZW5kRFRELHN0YXJ0RW50aXR5LGVuZEVudGl0eSxhdHRyaWJ1dGVEZWNsLGVsZW1lbnREZWNsLGV4dGVybmFsRW50aXR5RGVjbCxpbnRlcm5hbEVudGl0eURlY2wscmVzb2x2ZUVudGl0eSxnZXRFeHRlcm5hbFN1YnNldCxub3RhdGlvbkRlY2wsdW5wYXJzZWRFbnRpdHlEZWNsIi5yZXBsYWNlKC9cdysvZyxmdW5jdGlvbihyKXtscy5wcm90b3R5cGVbcl09ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19KTtmdW5jdGlvbiBjcyhyLGUpe3IuY3VycmVudEVsZW1lbnQ/ci5jdXJyZW50RWxlbWVudC5hcHBlbmRDaGlsZChlKTpyLmRvYy5hcHBlbmRDaGlsZChlKX1mdW5jdGlvbiBqZihyKXtpZihyPT09ImVycm9yIil0aHJvdyJvbkVycm9yU3RvcFBhcnNpbmcifWZ1bmN0aW9uIFhmKCl7dGhyb3cib25XYXJuaW5nU3RvcFBhcnNpbmcifVVyLl9fRE9NSGFuZGxlcj1scyxVci5ET01QYXJzZXI9YnUsVXIubm9ybWFsaXplTGluZUVuZGluZ3M9bXUsVXIub25FcnJvclN0b3BQYXJzaW5nPWpmLFVyLm9uV2FybmluZ1N0b3BQYXJzaW5nPVhmO3ZhciBZcj1SZTtZci5hc3NpZ24sWXIuaGFzRGVmYXVsdEhUTUxOYW1lc3BhY2UsWXIuaXNIVE1MTWltZVR5cGUsWXIuaXNWYWxpZE1pbWVUeXBlLFlyLk1JTUVfVFlQRSxZci5OQU1FU1BBQ0U7dmFyICRmPVRlLGVwPSRmLlhNTFNlcmlhbGl6ZXIsdHA9VXIscnA9dHAuRE9NUGFyc2VyO2NvbnN0IGhzPVN5bWJvbCgiY2hhbmdlZCIpLFpyPVN5bWJvbCgiY2xhc3NMaXN0IikseXQ9U3ltYm9sKCJDdXN0b21FbGVtZW50cyIpLEFzPVN5bWJvbCgiY29udGVudCIpLHZpPVN5bWJvbCgiZGF0YXNldCIpLHByPVN5bWJvbCgiZG9jdHlwZSIpLHdpPVN5bWJvbCgiRE9NUGFyc2VyIiksaWU9U3ltYm9sKCJlbmQiKSx5bj1TeW1ib2woIkV2ZW50VGFyZ2V0IiksZHM9U3ltYm9sKCJnbG9iYWxzIiksdnQ9U3ltYm9sKCJpbWFnZSIpLFZyPVN5bWJvbCgibWltZSIpLG5yPVN5bWJvbCgiTXV0YXRpb25PYnNlcnZlciIpLCQ9U3ltYm9sKCJuZXh0IiksU3U9U3ltYm9sKCJvd25lckVsZW1lbnQiKSxZZT1TeW1ib2woInByZXYiKSxqZT1TeW1ib2woInByaXZhdGUiKSx6cj1TeW1ib2woInNoZWV0IiksYXQ9U3ltYm9sKCJzdGFydCIpLERpPVN5bWJvbCgic3R5bGUiKSx2bj1TeW1ib2woInVwZ3JhZGUiKSxrZT1TeW1ib2woInZhbHVlIik7dmFyIElpO2NvbnN0IG5wPW5ldyBNYXAoW1swLDY1NTMzXSxbMTI4LDgzNjRdLFsxMzAsODIxOF0sWzEzMSw0MDJdLFsxMzIsODIyMl0sWzEzMyw4MjMwXSxbMTM0LDgyMjRdLFsxMzUsODIyNV0sWzEzNiw3MTBdLFsxMzcsODI0MF0sWzEzOCwzNTJdLFsxMzksODI0OV0sWzE0MCwzMzhdLFsxNDIsMzgxXSxbMTQ1LDgyMTZdLFsxNDYsODIxN10sWzE0Nyw4MjIwXSxbMTQ4LDgyMjFdLFsxNDksODIyNl0sWzE1MCw4MjExXSxbMTUxLDgyMTJdLFsxNTIsNzMyXSxbMTUzLDg0ODJdLFsxNTQsMzUzXSxbMTU1LDgyNTBdLFsxNTYsMzM5XSxbMTU4LDM4Ml0sWzE1OSwzNzZdXSksRXU9KElpPVN0cmluZy5mcm9tQ29kZVBvaW50KSE9PW51bGwmJklpIT09dm9pZCAwP0lpOnI9PntsZXQgZT0iIjtyZXR1cm4gcj42NTUzNSYmKHItPTY1NTM2LGUrPVN0cmluZy5mcm9tQ2hhckNvZGUocj4+PjEwJjEwMjN8NTUyOTYpLHI9NTYzMjB8ciYxMDIzKSxlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHIpLGV9O2Z1bmN0aW9uIHNwKHIpe3ZhciBlO3JldHVybiByPj01NTI5NiYmcjw9NTczNDN8fHI+MTExNDExMT82NTUzMzooZT1ucC5nZXQocikpIT09bnVsbCYmZSE9PXZvaWQgMD9lOnJ9ZnVuY3Rpb24geXUocil7Y29uc3QgZT10eXBlb2YgYXRvYj09ImZ1bmN0aW9uIj9hdG9iKHIpOnR5cGVvZiBCdWZmZXIuZnJvbT09ImZ1bmN0aW9uIj9CdWZmZXIuZnJvbShyLCJiYXNlNjQiKS50b1N0cmluZygiYmluYXJ5Iik6bmV3IEJ1ZmZlcihyLCJiYXNlNjQiKS50b1N0cmluZygiYmluYXJ5IiksdD1lLmxlbmd0aCYtMixuPW5ldyBVaW50MTZBcnJheSh0LzIpO2ZvcihsZXQgcz0wLGk9MDtzPHQ7cys9Mil7Y29uc3QgYT1lLmNoYXJDb2RlQXQocyksbz1lLmNoYXJDb2RlQXQocysxKTtuW2krK109YXxvPDw4fXJldHVybiBufWNvbnN0IGlwPXl1KCJRUjA4QUxrQUFnSDZBWXNETlFSMkJPMEVQZ1haQlFFR0xBYmRCeE1JU1FydkNtUUxmUXVyREtRTkx3NGZENFlQcEErNkQvSVBBQUFBQUFBQUFBQUFBQUFBS2hCTUVZOFRteFVXRjJFWUxCa3hHdUFhM1JzSkhEc2NXUjhZSUM4alNDU0lKY01sNmllM0t1OHJFQzBDTGpvdXBTN2tMZ0FJUlUxaFltTm1aMnh0Ym05d2NuTjBkVlFBV2dCZUFHVUFhUUJ6QUhjQWZnQ0JBSVFBaHdDU0FKb0FvQUNzQUxNQWJBQnBBR2NBTzRER0FNWkFVQUE3Z0NZQUprQmpBSFVBZEFCbEFEdUF3UURCUUhJaVpYWmxBQUpoQUFGcGVXMEFjZ0J5QUdNQU80RENBTUpBRUdSeUFBRGdOZGdFM1hJQVlRQjJBR1VBTzREQUFNQkE4Q0ZvWVpGajRTRmpjZ0JoWkFBQW9GTXFBQUZuY0lzQWpnQnZBRzRBQkdGbUFBRGdOZGc0M2ZBbGJIbEdkVzVqZEdsdmJnQ2dZU0JwQUc0QVp3QTdnTVVBeFVBQUFXTnpwQUNvQUhJQUFPQTEySnpjNlNGbmJnQ2dWQ0pwQUd3QVpBQmxBRHVBd3dERFFHMEFiQUE3Z01RQXhFQUFCR0ZqWldadmNuTjF4UURZQU5vQTdRRHhBUFlBK1FEOEFBQUJZM0xKQU04QWF5TnpiR0Z6YUFBQW9CWWlkZ0hUQU5VQUFLRG5LbVVBWkFBQW9BWWplUUFSWklBQlkzSjBBT0FBNVFEckFHRWlkWE5sQUFDZ05TTHVJMjkxYkd4cGN3Q2dMQ0ZoQUpKamNnQUE0RFhZQmQxd0FHWUFBT0ExMkRuZDVTRjJaZGhpWXdEeUFPb0FiU0p3WlhFQUFLQk9JZ0FIU0U5aFkyUmxabWhwYkc5eWMzVVhBUm9CSHdFNkFWSUJWUUZpQVdRQlpnR0NBYWtCNlFIdEFmSUJZd0I1QUNka1VBQlpBRHVBcVFDcFFJQUJZM0I1QUNVQktBRTFBZlVoZEdVR1lXbWcwaUowS0dGc1JHbG1abVZ5Wlc1MGFXRnNSQUFBb0VVaGJDSmxlWE1BQUtBdElRQUNZV1ZwYjBFQlJBRktBVTBCOGlGdmJneGhaQUJwQUd3QU80REhBTWRBY2dCakFBaGhiaUpwYm5RQUFLQXdJbThBZEFBS1lRQUJaRzVaQVYwQmFTSnNiR0VBdUdCMEkyVnlSRzkwQUxkZzhnQTVBV2tBcDJOeUltTnNaUUFBQWtSTlVGUndBWFFCZVFGOUFXOEFkQUFBb0praWFTSnVkWE1BQUtDV0l1d2hkWE1Bb0pVaWFTSnRaWE1BQUtDWEltOEFBQUZqYzRjQmxBRnJLbmRwYzJWRGIyNTBiM1Z5U1c1MFpXZHlZV3dBQUtBeUltVWpRM1Z5YkhrQUFBRkVVWndCcEFGdkpYVmliR1ZSZFc5MFpRQUFvQjBnZFNKdmRHVUFBS0FaSUFBQ2JHNXdkYkFCdGdITkFkZ0Jid0J1QUdXZ055SUFvSFFxZ0FGbmFYUUF2QUhCQWNVQjhpSjFaVzUwQUtCaEltNEFkQUFBb0M4aTd5VjFja2x1ZEdWbmNtRnNBS0F1SWdBQlpuTFJBZE1CQUtBQ0llOGlaSFZqZEFDZ0VDSnVMblJsY2tOc2IyTnJkMmx6WlVOdmJuUnZkWEpKYm5SbFozSmhiQUFBb0RNaTd5Rnpjd0NnTHlwakFISUFBT0ExMko3Y2NBQkRvTk1pWVFCd0FBQ2dUU0tBQlVSS1UxcGhZMlZtYVc5ekFBc0NFZ0lWQWhnQ0d3SXNBalFDT1FJOUFuTUNmd052b0VVaDlDSnlZV2hrQUtBUktXTUFlUUFDWkdNQWVRQUZaR01BZVFBUFpJQUJaM0p6QUNFQ0pRSW9BdWNoWlhJQW9DRWdjZ0FBb0tFaGFBQjJBQUNnNUNvQUFXRjVNQUl6QXZJaGIyNE9ZUlJrYkFCMG9BY2lZUUNVWTNJQUFPQTEyQWZkQUFGaFprRUNhd0lBQVdOdFJRSm5BdklqYVhScFkyRnNBQUpCUkVkVVVBSlVBbDhDWXdKakluVjBaUUMwWUc4QWRBRlpBbG9DMldKaUpHeGxRV04xZEdVQTNXSnlJbUYyWlFCZ1lHa2liR1JsQU54aTd5RnVaQUNneENKbUpXVnlaVzUwYVdGc1JBQUFvRVloY0FSOUFnQUFBQUFBQUlFQ2pnSUFBQm9EWmdBQTREWFlPOTFFb2FnQWhRS0pBbThBZEFBQW9Od2djU0oxWVd3QUFLQlFJdUloYkdVQUEwTkVURkpWVnBrQ3FBSzFBdThDL3dJUkEyOEFiZ0IwQUc4QWRRQnlBRWtBYmdCMEFHVUFad0J5QUdFQTdBREVBVzhBZEFLdkFnQUFBQUN3QXFoZ2JpTkJjbkp2ZHdBQW9OTWhBQUZsYjdrQzBBSm1BSFFBZ0FGQlVsUUF3UUxHQXMwQ2NpSnliM2NBQUtEUUlla2taMmgwUVhKeWIzY0FvTlFoWlFEbEFDc0NiZ0JuQUFBQlRGTFdBdWdDNVNGbWRBQUJRVkxjQXVFQ2NpSnliM2NBQUtENEora2taMmgwUVhKeWIzY0FvUG9uNlNSbmFIUkJjbkp2ZHdDZytTZHBJbWRvZEFBQUFVRlU5Z0w3QW5JaWNtOTNBQUNnMGlGbEFHVUFBS0NvSW5BQVFRSUdBd0FBQUFBTEEzSWljbTkzQUFDZzBTRnZKSGR1UVhKeWIzY0FBS0RWSVdVbGNuUnBZMkZzUW1GeUFBQ2dKU0p1QUFBRFFVSk1VbFJoSkFNMkF6b0RXZ054QTNvRGNpSnliM2NBQUtHVElVSlZMQU13QTJFQWNnQUFvQk1wY0NOQmNuSnZkd0FBb1BVaGNpSmxkbVVBRVdQbElXWjAwZ0pEQXdBQVN3TUFBRklEYVNWbmFIUldaV04wYjNJQUFLQlFLV1VrWlZabFkzUnZjZ0FBb0Y0cDVTSmpkRzl5UXFDOUlXRUFjZ0FBb0ZZcGFTSm5hSFFBMUFGaUF3QUFhUU5sSkdWV1pXTjBiM0lBQUtCZktlVWlZM1J2Y2tLZ3dTRmhBSElBQUtCWEtXVUFaUUJCb0tRaWNpSnliM2NBQUtDbklYSUFjZ0J2QVBjQXRBSUFBV04wZ3dPSEEzSUFBT0ExMkovYzhpRnZheEJoQUFoT1ZHRmpaR1puYkcxdmNIRnpkSFY0b3dPbEE2a0RzQU8vQThJRHhnUE5BOUlEOGdQOUF3RUVGQVFlQkNBRUpRUkhBRXBoU0FBN2dOQUEwRUJqQUhVQWRBQmxBRHVBeVFESlFJQUJZV2w1QUxZRHVRTytBL0loYjI0YVlYSUFZd0E3Z01vQXlrQXRaRzhBZEFBV1lYSUFBT0ExMkFqZGNnQmhBSFlBWlFBN2dNZ0F5RURsSW0xbGJuUUFvQWdpQUFGaGNOWUQyUU5qQUhJQUVtRjBBSGtBVXdMaEF3QUFBQURwQTIwbFlXeHNVM0YxWVhKbEFBQ2creVZsSjNKNVUyMWhiR3hUY1hWaGNtVUFBS0NySlFBQlozRDJBL2tEYndCdUFCaGhaZ0FBNERYWVBOM3pJbWxzYjI2VlkzVUFBQUZoYVFZRURnUnNBRlNnZFNwcElteGtaUUFBb0VJaTdDTnBZbkpwZFcwQW9Nd2hBQUZqYVJnRUd3UnlBQUNnTUNGdEFBQ2djeXBoQUpkamJRQnNBRHVBeXdETFFBQUJhWEFwQkMwRTh5RjBjd0NnQXlMdkpHNWxiblJwWVd4RkFLQkhJWUFDWTJacGIzTUFQUVEvQkVNRVhRUnlCSGtBSkdSeUFBRGdOZGdKM1d3aWJHVmtBRk1DVEFRQUFBQUFWQVJ0SldGc2JGTnhkV0Z5WlFBQW9Qd2xaU2R5ZVZOdFlXeHNVM0YxWVhKbEFBQ2dxaVZ3QTJVRUFBQnBCQUFBQUFCdEJHWUFBT0ExMkQzZHdTRnNiQUNnQUNMeUkybGxjblJ5WmdDZ01TRmpBUElBY1FRQUJrcFVZV0pqWkdabmIzSnpkSWdFaXdTT0JKTUVsd1NrQktjRXF3U3RCTElFNVFUcUJHTUFlUUFEWkR1QVBnQStRTzBoYldGa29KTUQzR055SW1WMlpRQWVZWUFCWldsNUFKMEVvQVNqQk9RaGFXd2lZWElBWXdBY1lSTmtid0IwQUNCaGNnQUE0RFhZQ3QwQW9Oa2ljQUJtQUFEZ05kZyszZVVpWVhSbGNnQURSVVpIVEZOVXZ3VElCTThFMVFUWkJPQUVjU0oxWVd3QVRLQmxJdVVoYzNNQW9Oc2lkU1JzYkVWeGRXRnNBQUNnWnlKeUkyVmhkR1Z5QUFDZ29pcmxJWE56QUtCM0l1d2tZVzUwUlhGMVlXd0FvSDRxYVNKc1pHVUFBS0J6SW1NQWNnQUE0RFhZb3R3QW9Hc2lBQVJCWVdObWFXOXpkZmtFL1FRRkJRZ0ZDd1VUQlNJRkt3VlNJa1JqZVFBcVpBQUJZM1FCQlFRRlpRQnJBTWRpWG1EcElYSmpKR0Z5QUFDZ0RDRnNKV0psY25SVGNHRmpaUUFBb0FzaDhBRVlCUUFBR3dWbUFBQ2dEU0hwSlhwdmJuUmhiRXhwYm1VQW9BQWxBQUZqZENZRktBWHlBQklGOGlGdmF5WmhiUUJ3QUVRQk1RVTVCVzhBZHdCdUFFZ0FkUUJ0QVBBQUFBRnhJblZoYkFBQW9FOGlBQWRGU2s5aFkyUm1aMjF1YjNOMGRWTUZWZ1ZaQlZ3Rll3VnRCWEFGY3dWNkJaQUZ0Z1hGQmNrRnpRVmpBSGtBRldUc0lXbG5NbUZqQUhrQUFXUmpBSFVBZEFCbEFEdUF6UUROUUFBQmFYbG5CV3dGY2dCakFEdUF6Z0RPUUJoa2J3QjBBREJoY2dBQW9CRWhjZ0JoQUhZQVpRQTdnTXdBekVBQW9SRWhZWEIvQllzRkFBRmpaNE1GaFFWeUFDcGhhU051WVhKNVNRQUFvRWdoYkFCcEFHVUE4d0Q2QXZRQmxRVUFBS1VGWmFBc0lnQUJaM0thQlo0RjhpRmhiQUNnS3lMekkyVmpkR2x2YmdDZ3dpSnBJM05wWW14bEFBQUJRMVNzQmJFRmJ5SnRiV0VBQUtCaklHa2liV1Z6QUFDZ1lpQ0FBV2R3ZEFDOEJiOEZ3d1Z2QUc0QUxtRm1BQURnTmRoQTNXRUFtV05qQUhJQUFLQVFJV2tpYkdSbEFDaGg2d0hTQlFBQTFRVmpBSGtBQm1Sc0FEdUF6d0RQUUlBQ1kyWnZjM1VBNFFYcEJlMEY4Z1g5QlFBQmFYbmxCZWdGY2dCakFEUmhHV1J5QUFEZ05kZ04zWEFBWmdBQTREWFlRZDNqQWZjRkFBRDdCWElBQU9BMTJLWGM4aUZqZVFoazZ5RmplUVJrZ0FOSVNtRmpabTl6QUF3R0R3WVNCaFVHSFFZaEJpWUdZd0I1QUNWa1l3QjVBQXhrOENGd1lacGpBQUZsZVJrR0hBYmtJV2xzTm1FYVpISUFBT0ExMkE3ZGNBQm1BQURnTmRoQzNXTUFjZ0FBNERYWXB0eUFCVXBVWVdObFpteHRiM04wQUQwR1FBWkRCbDRHYXdaa0IyZ0hjQWQwQjgwSDJnZGpBSGtBQ1dRN2dEd0FQRUNBQW1OdGJuQnlBRXdHVHdaU0JsVUdXd2IxSVhSbE9XSGlJV1JobTJObkFBQ2c2aWZzSTJGalpYUnlaZ0NnRWlGeUFBQ2duaUdBQVdGbGVRQmtCbWNHYWdieUlXOXVQV0hrSVdsc08yRWJaQUFCWm5OdkJqUUhkQUFBQlVGRFJFWlNWRlZXWVhLQUJwNEdwQWJHQnNzRzNBWURCeUVId1FJcUJ3QUJibktFQm93R1p5VnNaVUp5WVdOclpYUUFBS0RvSi9JaGIzY0FvWkFoUWxLVEJwY0dZUUJ5QUFDZzVDSHBKR2RvZEVGeWNtOTNBS0RHSVdVamFXeHBibWNBQUtBSUkyOEE5UUdxQmdBQXNnWmlKV3hsUW5KaFkydGxkQUFBb09ZbmJnRFVBYmNHQUFDK0JtVWtaVlpsWTNSdmNnQUFvR0VwNVNKamRHOXlRcURESVdFQWNnQUFvRmtwYkNKdmIzSUFBS0FLSTJraVoyaDBBQUFCUVZiU0J0Y0djaUp5YjNjQUFLQ1VJZVVpWTNSdmNnQ2dUaWtBQVdWeTRBYndCbVVBQUtHaklrRlc1Z2JyQm5JaWNtOTNBQUNncENIbEltTjBiM0lBb0ZvcGFTTmhibWRzWlFCQ29ySWkrd1lBQUFBQS93WmhBSElBQUtEUEtYRWlkV0ZzQUFDZ3RDSndBSUFCUkZSV0FBb0hFUWNZQis4a2QyNVdaV04wYjNJQW9GRXBaU1JsVm1WamRHOXlBQUNnWUNubEltTjBiM0pDb0w4aFlRQnlBQUNnV0NubEltTjBiM0pDb0x3aFlRQnlBQUNnVWlscEFHY0FhQUIwQUdFQWNnQnlBRzhBOXdETUFuTUFBQU5GUmtkTVUxUS9CMGNIVGdkVUIxZ0hYd2Z4SlhWaGJFZHlaV0YwWlhJQW9Ob2lkU1JzYkVWeGRXRnNBQUNnWmlKeUkyVmhkR1Z5QUFDZ2RpTGxJWE56QUtDaEt1d2tZVzUwUlhGMVlXd0FvSDBxYVNKc1pHVUFBS0J5SW5JQUFPQTEyQS9kWmFEWUl1WWpkR0Z5Y205M0FLRGFJV2tpWkc5MEFEOWhnQUZ1Y0hjQWVnZTFCN2tIWndBQUFreFNiSEtDQjVRSG13ZXJCK1VoWm5RQUFVRlNpQWVOQjNJaWNtOTNBQUNnOVNmcEpHZG9kRUZ5Y205M0FLRDNKK2trWjJoMFFYSnliM2NBb1BZbjVTRm1kQUFCWVhMY0FxRUhhUUJuQUdnQWRBQmhBSElBY2dCdkFQY0E1d0pwQUdjQWFBQjBBR0VBY2dCeUFHOEE5d0R1QW1ZQUFPQTEyRVBkWlFCeUFBQUJURksvQjhZSFpTUm1kRUZ5Y205M0FBQ2dtU0hwSkdkb2RFRnljbTkzQUtDWUlZQUJZMmgwQU5NSDFRZlhCL0lBV2dZQW9MQWg4aUZ2YTBGaEFLQnFJZ0FFWVdObFptbHZjM1hwQit3SDdnZi9Cd01JQ1FnT0NCRUljQUFBb0FVcGVRQWNaQUFCWkd6eUIva0hhU1IxYlZOd1lXTmxBQUNnWHlCc0kybHVkSEptQUFDZ015RnlBQURnTmRnUTNlNGpkWE5RYkhWekFLQVRJbkFBWmdBQTREWFlSTjFqQVBJQS9nZWNZNEFFU21GalpXWnZjM1IxQUNFSUpBZ29DRFVJZ1FpRkNEc0tRQXBIQ21NQWVRQUtaR01pZFhSbEFFTmhnQUZoWlhrQUxnZ3hDRFFJOGlGdmJrZGg1Q0ZwYkVWaEhXU0FBV2R6ZHdBN0NHRUlmUWpoSW5ScGRtV0FBVTFVVmdCRUNFd0lXUWhsSldScGRXMVRjR0ZqWlFBQW9Bc2dhQUJwQUFBQlkyNVNDRk1JYXdCVEFIQUFZUUJqQU9VQVN3aGxBSElBZVFCVUFHZ0FhUUR1QUZRSTlDRmxaQUFCUjB4bkNIVUljZ0JsQUdFQWRBQmxBSElBUndCeUFHVUFZUUIwQUdVQThnRHJCR1VBY3dCekFFd0FaUUJ6QVBNQTJ3ZE1JbWx1WlFBS1lISUFBT0ExMkJIZEFBSkNibkIwakFpUkNKa0luQWh5SW1WaGF3QUFvR0Fnd2laeVpXRnJhVzVuVTNCaFkyV2dZR1lBQUtBVklVT3E3Q3F6Q01JSXpRZ0FBT2NJR3drQUFBQUFBQUF0Q1FBQWJ3a0FBSWNKQUFDZENjQUpHUW9BQURRS0FBRnZkYllJdkFqdUkyZHlkV1Z1ZEFDZ1lpSndJa05oY0FBQW9HMGlieWgxWW14bFZtVnlkR2xqWVd4Q1lYSUFBS0FtSW9BQmJIRjRBTklJMXdqaENPVWliV1Z1ZEFDZ0NTTDFJV0ZzVktCZ0lta2liR1JsQUFEZ1FpSTRBMmtpYzNSekFBQ2dCQ0p5STJWaGRHVnlBQUNqYnlKRlJrZE1VMVQxQ1BvSUFna0pDUTBKRlFseEluVmhiQUFBb0hFaWRTUnNiRVZ4ZFdGc0FBRGdaeUk0QTNJalpXRjBaWElBQU9CcklqZ0Q1U0Z6Y3dDZ2VTTHNKR0Z1ZEVWeGRXRnNBT0IrS2pnRGFTSnNaR1VBQUtCMUl2VWhiWEJFQVNBSkp3bnZJM2R1U0hWdGNBRGdUaUk0QTNFaWRXRnNBQURnVHlJNEEyVUFBQUZtY3pFSlJnbjBKRlJ5YVdGdVoyeGxRcUxxSWowSkFBQUFBRUlKWVFCeUFBRGd6eWs0QTNFaWRXRnNBQUNnN0NKekFJQ2liaUpGUjB4VFZBQlJDVllKWEFsaENXa0pjU0oxWVd3QUFLQndJbklqWldGMFpYSUFBS0I0SXVVaGMzTUE0R29pT0FQc0pHRnVkRVZ4ZFdGc0FPQjlLamdEYVNKc1pHVUFBS0IwSXVVaWMzUmxaQUFCUjB4MUNYOEo4aVpsWVhSbGNrZHlaV0YwWlhJQTRLSXFPQVBsSTNOelRHVnpjd0Rnb1NvNEEvSWpaV05sWkdWekFLR0FJa1ZUandtVkNYRWlkV0ZzQUFEZ3J5bzRBK3drWVc1MFJYRjFZV3dBb09BaUFBRmxhYUFKcVFsMkptVnljMlZGYkdWdFpXNTBBQUNnRENMbkpXaDBWSEpwWVc1bmJHVkNvdXNpdGdrQUFBQUF1d2xoQUhJQUFPRFFLVGdEY1NKMVlXd0FBS0R0SWdBQmNYWERDZUFKZFNOaGNtVlRkUUFBQVdKd3l3blZDZk1oWlhSRjRJOGlPQU54SW5WaGJBQUFvT0lpNVNKeWMyVjBSZUNRSWpnRGNTSjFZV3dBQUtEaklvQUJZbU53QU9ZSjhBa05Ddk1oWlhSRjRJSWkwaUJ4SW5WaGJBQUFvSWdpNHlKbFpXUnpnS0dCSWtWVFZBRDZDUUFLQndweEluVmhiQUFBNExBcU9BUHNKR0Z1ZEVWeGRXRnNBS0RoSW1raWJHUmxBQURnZnlJNEErVWljbk5sZEVYZ2d5TFNJSEVpZFdGc0FBQ2dpU0pwSW14a1pRQ0FvVUVpUlVaVUFDSUtKd291Q25FaWRXRnNBQUNnUkNKMUpHeHNSWEYxWVd3QUFLQkhJbWtpYkdSbEFBQ2dTU0psSlhKMGFXTmhiRUpoY2dBQW9DUWlZd0J5QUFEZ05kaXAzR2tBYkFCa0FHVUFPNERSQU5GQW5XTUFCMFZoWTJSbVoyMXZjSEp6ZEhWMlhncGhDbWdLY2dwMkNub0tnUXFSQ3BZS3F3cXRDcnNLeUFyTkN1d2hhV2RTWVdNQWRRQjBBR1VBTzREVEFOTkFBQUZwZVd3S2NRcHlBR01BTzREVUFOUkFIbVJpSW14aFl3QlFZWElBQU9BMTJCTGRjZ0JoQUhZQVpRQTdnTklBMGtDQUFXRmxhUUNIQ29vS2pRcGpBSElBVEdGbkFHRUFxV05qSW5KdmJnQ2ZZM0FBWmdBQTREWFlSdDNsSTI1RGRYSnNlUUFCUkZHZUNxWUtieVYxWW14bFVYVnZkR1VBQUtBY0lIVWliM1JsQUFDZ0dDQUFvRlFxQUFGamJMRUt0UXB5QUFEZ05kaXEzR0VBY3dCb0FEdUEyQURZUUdrQWJBSEFDc1VLWkFCbEFEdUExUURWUUdVQWN3QUFvRGNxYlFCc0FEdUExZ0RXUUdVQWNnQUFBVUpRMHdybUNnQUJZWExYQ3RvS2NnQUFvRDRnWVFCakFBQUJaV3ZnQ3VJS0FLRGVJMlVBZEFBQW9MUWpZU1Z5Wlc1MGFHVnphWE1BQUtEY0k0QUVZV05tYUdsc2IzSnpBUDBLQXdzRkN3a0xDd3NNQ3hFTEl3dGFDM0lqZEdsaGJFUUFBS0FDSW5rQUgyUnlBQURnTmRnVDNXa0FwbU9nWS9VamMwMXBiblZ6c1dBQUFXbHdGUXNnQzI0QVl3QmhBSElBWlFCd0FHd0FZUUJ1QU9VQUNnVm1BQUNnR1NHQW9ic3FaV2x2QUNvTFJRdEpDK01pWldSbGM0Q2hlaUpGVTFRQU5BczVDMEFMY1NKMVlXd0FBS0N2S3V3a1lXNTBSWEYxWVd3QW9Id2lhU0pzWkdVQUFLQitJbTBBWlFBQW9ETWdBQUZrY0UwTFVRdjFJV04wQUtBUEltOGpjblJwYjI0QVlhQTNJbXdBQUtBZElnQUJZMmxlQzJJTGNnQUE0RFhZcTl5b1l3QUNWV1p2YzJvTGJ3dHpDM2NMVHdCVUFEdUFJZ0FpUUhJQUFPQTEyQlRkY0FCbUFBQ2dHaUZqQUhJQUFPQTEyS3pjQUFaQ1JXRmpaV1pvYVc5eWMzV1BDNU1MbHd1cEM3WUwyQXZiQzkwTGhReVRESm9Nb3d6aElYSnlBS0FRS1VjQU80Q3VBSzVBZ0FGamJuSUFuUXVnQzZNTDlTRjBaVlJoWndBQW9Pc25jZ0Iwb0tBaGJBQUFvQllwZ0FGaFpYa0Fyd3V5QzdVTDhpRnZibGhoNUNGcGJGWmhJR1Iyb0J3aFpTSnljMlVBQUFGRlZiOEx6d3NBQVd4eHd3dklDK1VpYldWdWRBQ2dDeUwxSkdsc2FXSnlhWFZ0QUtETElYQW1SWEYxYVd4cFluSnBkVzBBQUtCdktYSUFBS0FjSVc4QW9XUG5JV2gwQUFSQlEwUkdWRlZXWWV3TENnd1FERElNTnd4ZURId005Z0lBQVc1eThBdjRDMmNsYkdWQ2NtRmphMlYwQUFDZzZTZnlJVzkzQUtHU0lVSk0vd3NEREdFQWNnQUFvT1VoWlNSbWRFRnljbTkzQUFDZ3hDRmxJMmxzYVc1bkFBQ2dDU052QVBVQkZnd0FBQjRNWWlWc1pVSnlZV05yWlhRQUFLRG5KMjRBMUFFakRBQUFLZ3hsSkdWV1pXTjBiM0lBQUtCZEtlVWlZM1J2Y2tLZ3dpRmhBSElBQUtCVktXd2liMjl5QUFDZ0N5TUFBV1Z5T3d4TERHVUFBS0dpSWtGV1FReEdESElpY205M0FBQ2dwaUhsSW1OMGIzSUFvRnNwYVNOaGJtZHNaUUJDb3JNaVZnd0FBQUFBV2d4aEFISUFBS0RRS1hFaWRXRnNBQUNndFNKd0FJQUJSRlJXQUdVTWJBeHpETzhrZDI1V1pXTjBiM0lBb0U4cFpTUmxWbVZqZEc5eUFBQ2dYQ25sSW1OMGIzSkNvTDRoWVFCeUFBQ2dWQ25sSW1OMGIzSkNvTUFoWVFCeUFBQ2dVeWtBQVhCMWlReU1ER1lBQUtBZEllNGtaRWx0Y0d4cFpYTUFvSEFwNlNSbmFIUmhjbkp2ZHdDZzJ5RUFBV05vbmd5aERISUFBS0FiSVFDZ3NTSHNKR1ZFWld4aGVXVmtBS0QwS1lBR1NFOWhZMlpvYVcxdmNYTjBkUUMvRE1nTXpBelFET0lNNWd3S0RRME5GQTBaRFU4TlZBMVlEUUFCUTJQRERNWU15Q0ZqZVNsa2VRQW9aRVlpVkdONUFDeGtZeUoxZEdVQVdtRUFvcndxWVdWcGVkZ00yd3plRE9FTThpRnZibUJoNUNGcGJGNWhjZ0JqQUZ4aElXUnlBQURnTmRnVzNlOGhjblFBQWtSTVVsWHZEUFlNL1F3RURXOGtkMjVCY25KdmR3QUFvSk1oWlNSbWRFRnljbTkzQUFDZ2tDSHBKR2RvZEVGeWNtOTNBS0NTSVhBalFYSnliM2NBQUtDUkllY2hiV0dqWStFa2JHeERhWEpqYkdVQW9CZ2ljQUJtQUFEZ05kaEszWElDSHcwQUFBQUFJZzEwQUFDZ0dpTGhJWEpsZ0tHaEpVbFRWUUFxRFRJTlNnM3VKWFJsY25ObFkzUnBiMjRBb0pNaWRRQUFBV0p3TncxQURmTWhaWFJGb0k4aWNTSjFZV3dBQUtDUkl1VWljbk5sZEVXZ2tDSnhJblZoYkFBQW9KSWliaUpwYjI0QUFLQ1VJbU1BY2dBQTREWFlydHhoQUhJQUFLREdJZ0FDWW1OdGNGOE5hZzJPRFpBTmM2RFFJbVVBZEFCRm9OQWljU0oxWVd3QUFLQ0dJZ0FCWTJodURZa05aU0psWkhNQWdLRjdJa1ZUVkFCNERYME5oQTF4SW5WaGJBQUFvTEFxN0NSaGJuUkZjWFZoYkFDZ2ZTSnBJbXhrWlFBQW9IOGlWQUJvQUdFQTlBREhDd0NnRVNJQW9kRWlaWE9WRFo4TmNpSnpaWFFBUmFDREluRWlkV0ZzQUFDZ2h5SmxBSFFBQUtEUklvQUZTRkpUWVdObWFHbHZjbk1BdFEyN0RiOE55QTNPRGRzTjN3MytEUmdPSFE0akRrOEFVZ0JPQUR1QTNnRGVRTUVoUkVVQW9DSWhBQUZJWThNTnhnMWpBSGtBQzJSNUFDWmtBQUZpZGN3TnpRMEpZS1JqZ0FGaFpYa0ExQTNYRGRvTjhpRnZibVJoNUNGcGJHSmhJbVJ5QUFEZ05kZ1gzUUFCWlduakRlNE44Z0hvRFFBQTdRM2xJbVp2Y21VQW9EUWlZUUNZWXdBQlkyN3lEZmtOYXlOVGNHRmpaUUFBNEY4Z0NpRFRJbkJoWTJVQW9Ba2c3Q0ZrWllDaFBDSkZSbFFBQnc0TURoTU9jU0oxWVd3QUFLQkRJblVrYkd4RmNYVmhiQUFBb0VVaWFTSnNaR1VBQUtCSUluQUFaZ0FBNERYWVM5M3BJM0JzWlVSdmRBQ2cyeUFBQVdOMEp3NHJEbklBQU9BMTJLL2M4aUZ2YTJaaDRRcEZEbFlPWUE1cURnQUFiZzV5RGdBQUFBQUFBQUFBQUFCNURud09xQTZ6RGdBQURnOFJEeFlQR2c4QUFXTnlTQTVPRG5VQWRBQmxBRHVBMmdEYVFISUFiNkNmSWVNaGFYSUFvRWtwY2dEakFWc09BQUJkRG5rQURtUjJBR1VBYkdFQUFXbDVZdzVvRG5JQVl3QTdnTnNBMjBBalpHSWliR0ZqQUhCaGNnQUE0RFhZR04xeUFHRUFkZ0JsQUR1QTJRRFpRT0VoWTNKcVlRQUJaR2wvRHA4T1pRQnlBQUFCUWxDRkRwY09BQUZoY29rT2l3NXlBRjlnWVFCakFBQUJaV3VSRHBNT0FLRGZJMlVBZEFBQW9MVWpZU1Z5Wlc1MGFHVnphWE1BQUtEZEkyOEFiZ0JRb01NaTdDRjFjd0NnamlJQUFXZHdxdzZ1RG04QWJnQnlZV1lBQU9BMTJFemRBQVJCUkVWVVlXUndjNzhPMGc3WkR1RU9CUVBxRHZNT0J3OXlJbkp2ZHdEQ29aRWh5QTRBQU13T1lRQnlBQUNnRWlsdkpIZHVRWEp5YjNjQUFLREZJVzhrZDI1QmNuSnZkd0FBb0pVaGNTVjFhV3hwWW5KcGRXMEFBS0J1S1dVQVpRQkJvS1VpY2lKeWIzY0FBS0NsSVc4QWR3QnVBR0VBY2dCeUFHOEE5d0FRQTJVQWNnQUFBVXhTK1E0QUQyVWtablJCY25KdmR3QUFvSlloNlNSbmFIUkJjbkp2ZHdDZ2x5RnBBR3lnMGdOdkFHNEFwV1BwSVc1bmJtRmpBSElBQU9BMTJMRGNhU0pzWkdVQWFHRnRBR3dBTzREY0FOeEFnQVJFWW1Oa1pXWnZjM1lBTFE4eER6VVBOdzg5RDNJUGRnOTdENEFQNFNGemFBQ2dxeUpoQUhJQUFLRHJLbmtBRW1UaElYTm9iS0NwSWdDZzVpb0FBV1Z5UVE5RER3Q2d3U0tBQVdKMGVRQkpEMDBQYXc5aEFISUFBS0FXSUdtZ0ZpRGpJV0ZzQUFKQ1RGTlVXQTljRDE4UFpnOWhBSElBQUtBakl1a2hibVY4WUdVa2NHRnlZWFJ2Y2dBQW9GZ25hU0pzWkdVQUFLQkFJdFFrYUdsdVUzQmhZMlVBb0FvZ2NnQUE0RFhZR2Qxd0FHWUFBT0ExMkUzZFl3QnlBQURnTmRpeDNHUWlZWE5vQUFDZ3FpS0FBbU5sWm05ekFJNFBrUStWRDVrUG5nL3BJWEpqZEdIa0lXZGxBS0RBSW5JQUFPQTEyQnJkY0FCbUFBRGdOZGhPM1dNQWNnQUE0RFhZc3R3QUFtWnBiM09xRDY0UHJ3KzBEM0lBQU9BMTJCdmRubU53QUdZQUFPQTEyRS9kWXdCeUFBRGdOZGl6M0lBRVFVbFZZV05tYjNOMUFNZ1B5dy9PRDlFUDJBL2dEK1FQNlEvdUQyTUFlUUF2WkdNQWVRQUhaR01BZVFBdVpHTUFkUUIwQUdVQU80RGRBTjFBQUFGcGVkd1Azdzl5QUdNQWRtRXJaSElBQU9BMTJCemRjQUJtQUFEZ05kaFEzV01BY2dBQTREWFl0Tnh0QUd3QWVHRUFCRWhoWTJSbFptOXovZzhCRUFVUURSQVFFQjBRSUJBa0VHTUFlUUFXWkdNaWRYUmxBSGxoQUFGaGVRa1FEQkR5SVc5dWZXRVhaRzhBZEFCN1lmSUJGUkFBQUJ3UWJ3QlhBR2tBWkFCMEFPZ0FWQWhoQUpaamNnQUFvQ2doY0FCbUFBQ2dKQ0ZqQUhJQUFPQTEyTFhjNFF0Q0VFa1FUUkFBQUdjUWJSQnlFQUFBQUFBQUFBQUFlUkNLRUpjUThoRDlFQUFBR3hFaEVUSVJPUkVBQUQ0Ull3QjFBSFFBWlFBN2dPRUE0VUJ5SW1WMlpRQURZWUNpUGlKRlpHbDFlUUJXRUZrUVd4QmdFR1VRQU9BK0lqTURBS0EvSW5JQVl3QTdnT0lBNGtCMEFHVUFPNEMwQUxSQU1HUnNBR2tBWndBN2dPWUE1a0J5b0dFZ0FPQTEyQjdkY2dCaEFIWUFaUUE3Z09BQTRFQUFBV1Z3ZkJDR0VBQUJabkNBRUlRUTh5RjViUUNnTlNIb0FJTVFhQUJoQUxGakFBRmhjSTBRV3dBQUFXTnNrUkNURUhJQUFXRm5BQUNnUHlwa0Fwd1FBQUFBQUxFUUFLSW5JbUZrYzNhakVLY1FxUkN1RUc0QVpBQUFvRlVxQUtCY0ttd2liM0JsQUFDZ1dDb0FvRm9xQUtNZ0ltVnNiWEp6ZXJzUXZSREFFTjBRNVJEdEVBQ2dwQ2xsQUFDZ0lDSnpBR1FBWWFBaEltRUV6aERRRU5JUTFCRFdFTmdRMmhEY0VBQ2dxQ2tBb0trcEFLQ3FLUUNncXlrQW9Ld3BBS0N0S1FDZ3Jpa0FvSzhwZEFCMm9COGlZZ0Jrb0w0aUFLQ2RLUUFCY0hUcEVPd1FhQUFBb0NJaXhXRGhJWEp5QUtCOEl3QUJaM0QxRVBnUWJ3QnVBQVZoWmdBQTREWFlVdDBBbzBnaVJXRmxhVzl3QnhFSkVRMFJEeEVTRVJRUkFLQndLdU1oYVhJQW9HOHFBS0JLSW1RQUFLQkxJbk1BSjJEeUlXOTRaYUJJSXZFQURoRnBBRzRBWndBN2dPVUE1VUNBQVdOMGVRQW1FU29SS3hGeUFBRGdOZGkyM0NwZ2JRQndBR1dnU0NMeEFQZ0JhUUJzQUdRQVpRQTdnT01BNDBCdEFHd0FPNERrQU9SQUFBRmphVUVSUnhGdkFHNEFhUUJ1QVBRQTZBRnVBSFFBQUtBUktnQUlUbUZpWTJSbFptbHJiRzV2Y0hKemRXUVJhQkdYRVo4UnB4R3JFZElSMWhFckVqQVNleEtLRW4wUlRoTmJFM29UYndCMEFBQ2c3U29BQVdOeWJCR0pFV3NBQUFKalpYQnpkQkY0RVgwUmdoSHZJVzVuQUtCTUluQWpjMmxzYjI0QTltTnlJbWx0WlFBQW9EVWdhUUJ0QUdXZ1BTSnhBQUNnelNKMkFZMFJrUkZsQUdVQUFLQzlJbVVBWkFCbm9BVWpaUUFBb0FVamNnQnJBSFNndFNQaUlYSnJBS0MySXdBQmIzbWpFYVlSYmdEbkFIY1JNV1R4SVhWdkFLQWVJSUFDWTIxd2NuUUF0Qkc1RWI0UndSSEZFZUVoZFhQbG9EVWk1QUJ3SW5SNWRnQUFvTEFwY3dEcEFIMFJiZ0J2QVBVQTZnQ0FBV0ZvZHdETEVjd1J6aEd5WXdDZ05pSGxJV1Z1QUtCc0luSUFBT0ExMkIvZFp3Q0FBMk52YzNSMWRuY0E0eEh5RVFVU0VoSWhFaVlTS1JLQUFXRnBkUURwRWVzUjd4SHdBS01GY2dCakFBQ2c3eVZ3QUFDZ3d5S0FBV1J3ZEFENEVmd1JBQkp2QUhRQUFLQUFLdXdoZFhNQW9BRXFhU0p0WlhNQUFLQUNLbkVDQ3hJQUFBQUFEeExqSVhWd0FLQUdLbUVBY2dBQW9BVW04aU5wWVc1bmJHVUFBV1IxR2hJZUV1OGhkMjRBb0wwbGNBQUFvTE1sY0NKc2RYTUFBS0FFS21VQTVRQkNEK1VBa2c5aEluSnZkd0FBb0EwcGdBRmhhMjhBTmhKb0VuY1NBQUZqYmpvU1pSSnJBSUFCYkhOMEFFRVNSeEpORW04amVtVnVaMlVBQUtEcktYRUFkUUJoQUhJQTVRQmNCUElqYVdGdVoyeGxnS0cwSldSc2NnQllFbHdTWUJMdklYZHVBS0MrSmVVaFpuUUFvTUlsYVNKbmFIUUFBS0M0SldzQUFLQWpKTEVCYlJJQUFIVVNzZ0Z4RWdBQWN4SUFvSklsQUtDUkpUUUFBS0NUSldNQWF3QUFvSWdsQUFGbGIzOFNoeEp4NEQwQTVTRDFJV2wyQU9CaEl1VWdkQUFBb0JBakFBSndkSGQ0a1JLVkVwc1NueEptQUFEZ05kaFQzWFNncFNKdkFHMEFBS0NsSXZRaGFXVUFvTWdpQUFaRVNGVldZbVJvYlhCMGRYYXlFc0VTMFJMZ0V2Y1MreElLRXhvVEh4TWpFeWdUTnhNQUFreFNiSEs1RXJzU3ZSSy9FZ0NnVnlVQW9GUWxBS0JXSlFDZ1V5VUFvbEFsUkZWa2Rja1N5eExORXM4U0FLQm1KUUNnYVNVQW9HUWxBS0JuSlFBQ1RGSnNjdGdTMmhMY0V0NFNBS0JkSlFDZ1dpVUFvRndsQUtCWkpRQ2pVU1ZJVEZKb2JITHJFdTBTN3hMeEV2TVM5UklBb0d3bEFLQmpKUUNnWUNVQW9Hc2xBS0JpSlFDZ1h5VnZBSGdBQUtESktRQUNURkpzY2dJVEJCTUdFd2dUQUtCVkpRQ2dVaVVBb0JBbEFLQU1KUUNpQUNWRVZXUjFFaE1VRXhZVEdCTUFvR1VsQUtCb0pRQ2dMQ1VBb0RRbGFTSnVkWE1BQUtDZkl1d2hkWE1Bb0o0aWFTSnRaWE1BQUtDZ0lnQUNURkpzY2k4VE1STXpFelVUQUtCYkpRQ2dXQ1VBb0JnbEFLQVVKUUNqQWlWSVRGSm9iSEpDRTBRVFJoTklFMG9UVEJNQW9Hb2xBS0JoSlFDZ1hpVUFvRHdsQUtBa0pRQ2dIQ1VBQVdWMlVoTlZFM1lBNVFENUFHSUFZUUJ5QUR1QXBnQ21RQUFDWTJWcGIySVRaaE5xRTI0VGNnQUE0RFhZdDl4dEFHa0FBS0JQSUcwQTVhQTlJb2dSYkFBQW9Wd0FZbWgwRTNZVEFLREZLZk1oZFdJQW9NZ25iQUYrRTRRVGJBQmxvQ0lnZEFBQW9DSWdjQUFBb1U0aVJXV0pFNHNUQUtDdUt2R2dUeUk4QmVFTXFSTUFBTjhUQUJRREZCOFVBQUFqRkRRVUFBQUFBSVVVQUFBQUFJMFVBQUFBQU5jVTR4VDNGUHNVQUFDSUZRQUFsaFdBQVdOd2NnQ3VFN0VUMVJQMUlYUmxCMkdBb2lraVlXSmpaSE1BdXhPL0U4UVR6aFBTRTI0QVpBQUFvRVFxY2lKamRYQUFBS0JKS2dBQllYWElFOHNUY0FBQW9Fc3FjQUFBb0VjcWJ3QjBBQUNnUUNvQTRDa2lBUDRBQVdWdjJSUGNFM1FBQUtCQklPNEFCQVVBQW1GbGFYWGxFKzhUOVJQNEUvQUI2aE1BQU8wVGN3QUFvRTBxYndCdUFBMWhaQUJwQUd3QU80RG5BT2RBY2dCakFBbGhjQUJ6QUhPZ1RDcHRBQUNnVUNwdkFIUUFDMkdBQVdSdGJnQUlGQTBVRWhScEFHd0FPNEM0QUxoQWNDSjBlWFlBQUtDeUtYUUFBSUdpQUR0bEdCUVpGS0pBY2dCa0FHOEE5QUJpQVhJQUFPQTEyQ0RkZ0FGalpXa0FLQlFxRkRJVWVRQkhaR01BYXdCdG9CTW40U0Z5YXdDZ0V5ZkhZM0lBQUtQTEpVVmpaV1p0Y3o4VVFSUkhGSGNVZkJTQUZBQ2d3eWtBb2NZQ1pXeEdGRWtVY1FBQW9GY2laUUJoQWxBVUFBQUFBR0FVY2lKeWIzY0FBQUZzY2xZVVdoVGxJV1owQUtDNklXa2laMmgwQUFDZ3V5R0FBbEpUWVdOa0FHZ1VhUlJyRkc4VWN4U3VZQUNneUNSekFIUUFBS0NiSXVraGNtTUFvSm9pNFNGemFBQ2duU0p1SW1sdWRBQUFvQkFxYVFCa0FBQ2c3eXJqSVdseUFLRENLZlVoWW5OMW9HTW1hUUIwQUFDZ1l5YnNBcE1VbWhTMkZBQUF3eFJ2QUc0QVphQTZBUEdnVkNLckFHMENueFFBQUFBQW94UmhBSFNnTEFCQVlBQ2hBU0ptYktjVXFSVHVBQk1OWlFBQUFXMTRyaFN5Rk9VaGJuUUFvQUVpWlFEekFOSUI1d0c2RkFBQXdCUmtvRVVpYndCMEFBQ2diU3B1QVBRQXpBR0FBV1p5ZVFESUZNc1V6aFFBNERYWVZOMXZBT1FBMXdFQWdha0FPM01lQWRNVWNnQUFvQmNoQUFGaGI5b1UzaFJ5QUhJQUFLQzFJWE1BY3dBQW9CY25BQUZqZGVZVTZoUnlBQURnTmRpNDNBQUJZbkR1RlBJVVphRFBLZ0NnMFNwbG9OQXFBS0RTS3VRaGIzUUFvTzhpZ0FOa1pXeHdjblozQUFZVkVCVWJGU0VWUkJWbEZZUVY0U0Z5Y2dBQmJISU1GUTRWQUtBNEtRQ2dOU2x3QWhZVkFBQUFBQmtWY2dBQW9ONGlZd0FBb044aTRTRnljbkNndGlFQW9EMHBnS0lxSW1KalpHOXpBQ3NWTUJVNkZUNFZRUlZ5SW1OaGNBQUFvRWdxQUFGaGRUUVZOeFZ3QUFDZ1JpcHdBQUNnU2lwdkFIUUFBS0NOSW5JQUFLQkZLZ0RnS2lJQS9nQUNZV3h5ZGtzVlVSVnVGWE1WY2dCeUFHMmd0eUVBb0R3cGVRQ0FBV1YyZHdCWUZXVVZhUlZ4QUhBQ1h4VUFBQUFBWXhWeUFHVUE0d0FYRlhVQTR3QVpGV1VBWlFBQW9NNGlaU0prWjJVQUFLRFBJbVVBYmdBN2dLUUFwRUJsSTJGeWNtOTNBQUFCYkhKN0ZYOFY1U0ZtZEFDZ3RpRnBJbWRvZEFBQW9MY2haUURrQUcwVkFBRmphWXNWa1JWdkFHNEFhUUJ1QVBRQWt3RnVBSFFBQUtBeEltd2lZM1I1QUFDZ0xTT0FDVUZJWVdKalpHVm1hR2xxYkc5eWMzUjFkM29BdUJXN0ZiOFYxUlhnRmVnVitSVUtGaFVXSHhaVUZsY1daUmJGRnRzVzd4YjdGZ1VYQ2hkeUFQSUF0QUpoQUhJQUFLQmxLUUFDWjJ4eWM4WVZ5aFhPRmRBVjV5RmxjZ0NnSUNEbElYUm9BS0E0SWZJQTlReG9BSGFnRUNBQW9LTWlhd0haRmQ0VllTSnliM2NBQUtBUEtXRUE0d0JmQWdBQllYbmtGZWNWOGlGdmJnOWhOR1FBb1VZaFlXL3RGZlFWQUFGbmNpRUM4UlZ5QUFDZ3lpRjBJbk5sY1FBQW9IY3FnQUZuYkcwQS94VUNGZ1VXTzRDd0FMQkFkQUJoQUxSamNDSjBlWFlBQUtDeEtRQUJhWElPRmhJVzh5Rm9kQUNnZnlrQTREWFlJZDFoQUhJQUFBRnNjaHNXSFJZQW9NTWhBS0RDSVlBQ1lXVm5jM1lBS0JhdUFqWVdPaFkrRm0wQUFLSEVJbTl6TGhZMEZtNEFaQUJ6b01RaTlTRnBkQUNnWmlaaEltMXRZUURkWTJrQWJnQUFvUElpQUtIM0FHbHZReFpSRm1RQVpRQUFnZmNBTzI5S0Zrc1c5MEJ1STNScGJXVnpBQUNneHlKdUFQZ0FVQlpqQUhrQVVtUmpBRzhDWGhZQUFBQUFZaFp5QUc0QUFLQWVJMjhBY0FBQW9BMGpnQUpzY0hSMWR3QnVGbkVXZFJhU0ZwNFc3Q0ZoY2lSZ1pnQUE0RFhZVmQwQW90a0NaVzF3YzMwV2hCYUpGbzBXY1FCa29GQWlid0IwQUFDZ1VTSnBJbTUxY3dBQW9EZ2k3Q0YxY3dDZ0ZDTHhJblZoY21VQW9LRWlZZ0JzQUdVQVlnQmhBSElBZHdCbEFHUUFad0RsQU5jQWJnQ0FBV0ZrYUFDbEZxb1d0Qlp5QUhJQWJ3RDNBUFVNYndCM0FHNEFZUUJ5QUhJQWJ3QjNBUE1BOHhWaEkzSndiMjl1QUFBQmJISzhGc0FXWlFCbUFQUUFIQlpwQUdjQWFBRDBBQjRXWWdISkZzOFdhd0JoQUhJQWJ3RDNBSklMYndMVUZnQUFBQURZRm5JQWJnQUFvQjhqYndCd0FBQ2dEQ09BQVdOdmRBRGhGdWtXN0JZQUFYSjU1UmJvRmdEZ05kaTUzRlZrYkFBQW9QWXA4aUZ2YXhGaEFBRmtjdk1XOXhadkFIUUFBS0R4SW1rQTVxQy9KVnNTQUFGaGFQOFdBaGR5QVBJQU5RTmhBUElBMXd2aEltNW5iR1VBb0tZcEFBRmphUTRYRUJkNUFGOWs1eUp5WVhKeUFLRC9Kd0FKUkdGalpHVm1aMnh0Ym05d2NYSnpkSFY0TVJjNEYwWVhXeGN5QkY0WGFSZDVGNDBYckJlMEY3OFgyUmNWR0NFWUxSZzFHRUFZQUFGRWJ6VVhnUlp2QVBRQStCVUFBV056UEJkQ0YzVUFkQUJsQUR1QTZRRHBRUFFoWlhJQW9HNHFBQUpoYVc5NVRSZFFGMVlYV2hmeUlXOXVHMkZ5QUdPZ1ZpSTdnT29BNmtEc0lXOXVBS0JWSWsxa2J3QjBBQmRoQUFGRWNtSVhaaGR2QUhRQUFLQlNJZ0RnTmRnaTNYS2htaXB1RjNRWFlRQjJBR1VBTzREb0FPaEFaS0NXS204QWRBQUFvSmdxZ0tHWkttbHNjd0NBRjRVWGh4ZnVJblJsY25NQW9PY2pBS0FUSVdTZ2xTcHZBSFFBQUtDWEtvQUJZWEJ6QUpNWGxoZWlGMk1BY2dBVFlYUUFlUUJ6b2dVaW54Y0FBQUFBb1JkbEFIUUFBS0FGSW5BQU1hQURJRE1CcVJlckZ3Q2dCQ0FBb0FVZ0FBRm5jN0FYc1JkTFlYQUFBS0FDSUFBQlozQzRGN3NYYndCdUFCbGhaZ0FBNERYWVZ0MkFBV0ZzY3dERkY4c1h6eGR5QUhPZzFTSnNBQUNnNHlsMUFITUFBS0J4S21rQUFLRzFBMngyMVJmWUYyOEFiZ0MxWS9WakFBSmpjM1YyNEJmb0YvMFhFQmdBQVdsdjVCZFdGM0lBWXdBQW9GWWlhUUx1RndBQUFBRHdGKzBBRFFUaElXNTBBQUZuYlBVWCtSZDBBSElBQUtDV0t1VWhjM01Bb0pVcWdBRmhaV2tBQXhnR0dBb1liQUJ6QUQxZ2N3QjBBQUNnWHlKMkFFU2dZU0pFQUFDZ2VDcndJbUZ5YzJ3QW9PVXBBQUZFWVJrWUhSaHZBSFFBQUtCVEluSUFjZ0FBb0hFcGdBRmpaR2tBSnhncUdPMFhjZ0FBb0M4aGJ3RDBBSXdDQUFGaGFERVlNaGkzWXp1QThBRHdRQUFCYlhJNUdEMFliQUE3Z09zQTYwQnZBQUNnckNDQUFXTnBjQUJHR0VnWVN4aHNBQ0ZnY3dEMEFDd0VBQUZsYjA4WVZ4aGpBSFFBWVFCMEFHa0Fid0R1QUJvRWJnQmxBRzRBZEFCcEFHRUFiQURsQURNRTRRbDFHQUFBZ1JnQUFJTVlpQmdBQUFBQW9SaWxHQUFBcWhnQUFMc1l2aGpSR0FBQTF4Z25HV3dBYkFCcEFHNEFad0JrQUc4QWRBQnpBR1VBOFFCbEYza0FSR1J0SW1Gc1pRQUFvRUFtZ0FGcGJISUFqUmlSR0owWTdDRnBad0NnQS90cEFwY1lBQUFBQUpvWVp3QUFvQUQ3YVFCbkFBQ2dCUHNBNERYWUk5M3NJV2xuQUtBQisrd2hhV2NBNEdZQWFnQ0FBV0ZzZEFDdkdMSVl0aGgwQUFDZ2JTWnBBR2NBQUtBQysyNEFjd0FBb0xFbGJ3Qm1BSkpoOEFIQ0dBQUF4aGhtQUFEZ05kaFgzUUFCWVd2SkdNd1liQURzQUdzRWRxRFVJZ0NnMlNwaEkzSjBhVzUwQUFDZ0RTb0FBV0Z2MmhnaUdRQUJZM1BlR0I4WnNRUG5HUDBZQlJrU0dSVVpBQUFkR2JJRDd4anlHUFFZOXhqNUdBQUEreGc3Z0wwQXZVQUFvRk1oTzRDOEFMeEFBS0JWSVFDZ1dTRUFvRnNoc3dFQkdRQUFBeGtBb0ZRaEFLQldJYlFDQ3hrT0dRQUFBQUFRR1R1QXZnQytRQUNnVnlFQW9Gd2hOUUFBb0ZnaHRnRVpHUUFBR3hrQW9Gb2hBS0JkSVRnQUFLQmVJV3dBQUtCRUlIY0FiZ0FBb0NJall3QnlBQURnTmRpNzNJQUlSV0ZpWTJSbFptZHBhbXh1YjNKemRIWUFSaGxLR1ZvWlhobG1HV2taa2htV0daa1puUm1nR2EwWnhobkxHYzhaNEJrakdteWdaeUlBb0l3cWdBRmpiWEFBVUJsVEdWZ1o5U0YwWmZWaGJRQmhBT1Nnc3dNNkZnQ2doaXB5SW1WMlpRQWZZUUFCYVhsaUdXVVpjZ0JqQUIxaE0yUnZBSFFBSVdHQW9XVWliSEZ6QU1ZRWNCbDZHZkdoWlNMT0JBQUFkaGxzQUdFQWJnRDBBTjhFZ0tGK0ttTmtiQUNCR1lRWmpCbGpBQUNncVNwdkFIUUFiNkNBS215Z2dpb0FvSVFxWmVEYklnRCtjd0FBb0pRcWNnQUE0RFhZSk4zbm9Hc2lyQVR0SVdWc0FLQTNJV01BZVFCVFpJQ2hkeUpGWVdvQXB4bXBHYXNaQUtDU0tnQ2dwU29Bb0tRcUFBSkZZV1Z6dEJtMkdiMFp3aGtBb0draWNBQndvSW9xOGlGdmVBQ2dpaXB4b0lncThhQ0lLclVaYVFCdEFBQ2c1eUp3QUdZQUFPQTEyRmpkWVFCMkFPVUFZd0lBQVdOcDB4bldHWElBQUtBS0lXMEFBS0Z6SW1WczNCbmVHUUNnamlvQW9KQXFBSU0rQUR0alpHeHhjbzBFNnhuMEdmZ1ovQmtCR2dBQlkybnZHZkVaQUtDbktuSUFBS0I2S204QWRBQUFvTmNpMENGaGNnQ2dsU2wxSW1WemRBQUFvSHdxZ0FKaFpHVnNjd0FLR3ZRWkZoclZCQ0FhOEFFUEdnQUFGQnB3QUhJQWJ3RDRBRmtaY2dBQW9IZ3BjUUFBQVd4eHhBUWJHbXdBWlFCekFQTUFTUmxwQU8wQTVBUUFBV1Z1SnhvdUduSWpkRzVsY1hFQUFPQnBJZ0QreFFBc0dnQUZRV0ZpWTJWbWEyOXplVUFhUXhwbUdtb2FiUnFER29jYWxockNHdE1hY2dEeUFNd0NBQUpwYkcxeVNocE9HbEFhVkJweUFITUE4QUJ4RDJZQXZXQnBBR3dBOUFBU0JRQUJaSEpZR2xzYVl3QjVBRXBrQUtHVUlXTjNZQnBrR21rQWNnQUFvRWdwQUtDdElXRUFjZ0FBb0E4aDZTRnlZeVZoZ0FGaGJISUFjeHA3R244YThpRjBjM1dnWlNacEFIUUFBS0JsSnV3aGFYQUFvQ1lnNHlGdmJnQ2d1U0p5QUFEZ05kZ2wzWE1BQUFGbGQ0d2FrUnBoSW5KdmR3QUFvQ1VwWVNKeWIzY0FBS0FtS1lBQ1lXMXZjSElBbnhxakdxY2F1aHErR25JQWNnQUFvUDhoOUNGb2RBQ2dPeUpyQUFBQmJIS3NHck1hWlNSbWRHRnljbTkzQUFDZ3FTSHBKR2RvZEdGeWNtOTNBS0NxSVdZQUFPQTEyRm5kNGlGaGNnQ2dGU0NBQVdOc2RBRElHc3dhMEJweUFBRGdOZGk5M0dFQWN3RG9BR2thOGlGdmF5ZGhBQUZpY05jYTJ4cjFJV3hzQUtCRElPZ2haVzRBb0JBZzRRcjJHZ0FBL1JvQUFBZ2JFeHNhR3dBQUlSczdHd0FBQUFBK0cySWJtUnVWRzZzYkFBQ3lHODBiMGh0akFIVUFkQUJsQUR1QTdRRHRRQUNoWXlCcGVRRWJCaHR5QUdNQU80RHVBTzVBT0dRQUFXTjRDeHNORzNrQU5XUmpBR3dBTzRDaEFLRkFBQUZtY3NzQ0Zoc0E0RFhZSnQxeUFHRUFkZ0JsQUR1QTdBRHNRSUNoU0NGcGJtOEFKeHN5R3pZYkFBRnBiaXNiTHh0dUFIUUFBS0FNS25RQUFLQXRJdVloYVc0QW9Od3BkQUJoQUFDZ0tTSHNJV2xuTTJHQUFXRnZjQUJERzFzYlhodUFBV05uZEFCSkcwc2JXUnR5QUN0aGdBRmxiSEFBY1FWUkcxVWJhUUJ1QU9VQXlBVmhBSElBOUFCeUJXZ0FNV0ZtQUFDZ3R5SmxBR1FBdFdFQW9nZ2lZMlp2ZEdrYmJSdDFHM2tiNFNGeVpRQ2dCU0ZwQUc0QWRLQWVJbWtBWlFBQW9OMHBaQUJ2QVBRQVd4c0FvaXNpWTJWc2NJRWJoUnVQRzVRYllRQnNBQUNndWlJQUFXZHlpUnVORzJVQWNnRHpBQ01RNHdDQ0cyRWljbWhyQUFDZ0Z5cnlJVzlrQUtBOEtnQUNZMmR3ZEo4Ym9SdWtHNmdiZVFCUlpHOEFiZ0F2WVdZQUFPQTEyRnJkWVFDNVkzVUFaUUJ6QUhRQU80Qy9BTDlBQUFGamFiVWJ1UnR5QUFEZ05kaSszRzRBQUtJSUlrVmtjM2JDRzhRYnlCdlFBd0NnK1NKdkFIUUFBS0QxSW5hZzlDSUFvUE1pYWFCaUlPd2haR1VwWWVzQjFoc0FBTmtiWXdCNUFGWmtiQUE3Z084QTcwQUFBMk5tYlc5emRlWWI3aHZ5Ry9VYitoc0ZIQUFCYVhucUcrMGJjZ0JqQURWaE9XUnlBQURnTmRnbjNlRWhkR2czWW5BQVpnQUE0RFhZVzkzakFmOGJBQUFESEhJQUFPQTEyTC9jOGlGamVWaGs2eUZqZVZSa0FBUmhZMlpuYUdwdmN4VWNHaHdpSENZY0tod3RIREFjTlJ6d0lYQmhkcUM2QS9CakFBRmxlUjRjSVJ6a0lXbHNOMkU2WkhJQUFPQTEyQ2pkY2lKbFpXNEFPR0ZqQUhrQVJXUmpBSGtBWEdSd0FHWUFBT0ExMkZ6ZFl3QnlBQURnTmRqQTNJQUxRVUpGU0dGaVkyUmxabWRvYW14dGJtOXdjbk4wZFhZQVhoeHRISEVjZFJ4NUhOOGNCeDBkSFR3ZDNCM3RIZkVkQVI0RUhoMGVMQjVGSHJ3ZXd4N2hIZ2tmUFI5TEg0QUJZWEowQUdRY1p4eHBISElBOGdCdkIvSUF4UUxoSVdsc0FLQWJLZUVoY25JQW9BNHBaNkJtSWdDZ2l5cGhBSElBQUtCaUtXTUpqUndBQUpBY0FBQ1ZIQUFBQUFBQUFBQUFBQUNaSEp3Y0FBQ21IS2djclJ3QUFOSWM5U0YwWlRwaDdTSndkSGwyQUtDMEtYSUFZUUR1QUZvRzRpRmtZYnRqWndBQW9lZ25aR3loSEtNY0FLQ1JLZVVBaXdZQW9JVXFkUUJ2QUR1QXF3Q3JRSElBZ0tPUUlXSm1hR3h3YzNRQXVoeS9ITUljeEJ6SEhNb2N6aHhtb09RaGN3QUFvQjhwY3dBQW9CMHA2d0N5R25BQUFLQ3JJV3dBQUtBNUtXa0FiUUFBb0hNcGJBQUFvS0loQUtHckttRmwxaHphSEdrQWJBQUFvQmtwYzZDdEtnRGdyU29BL29BQllXSnlBT1VjNlJ6dEhISUFjZ0FBb0F3cGNnQnJBQUNnY2ljQUFXRnI4Uno0SEdNQUFBRmxhL1ljOXh4N1lGdGdBQUZsYy93Yy9od0FvSXNwYkFBQUFXUjFBeDBGSFFDZ2p5a0FvSTBwQUFKaFpYVjVEaDBSSFJvZEhCM3lJVzl1UG1FQUFXUnBGUjBZSFdrQWJBQThZZXdBb3diaUFQY2NPMlFBQW1OeGNuTWtIU2NkTEIwNUhXRUFBS0EyS1hVQWJ3RHlvQndncWhFQUFXUjFNQjAwSGVnaFlYSUFvR2NwY3lKb1lYSUFBS0JMS1dnQUFLQ3lJUUNpWkNKbVozRnpSQjFGQjVRZG5oMTBBSUFDWVdoc2NuUUFUaDFXSFdVZGJCMk5IWElpY205M0FIU2drQ0ZoQU9rQXp4eGhJM0p3YjI5dUFBQUJaSFZlSFdJZDd5RjNiZ0NndlNGd0FBQ2d2Q0hsSkdaMFlYSnliM2R6QUtESElXa2laMmgwQUlBQllXaHpBSFVkZXgyREhYSWljbTkzQVBPZ2xDR2RCbUVBY2dCd0FHOEFid0J1QVBNQXpndHhBSFVBYVFCbkFHRUFjZ0J5QUc4QTl3QmxHdWdrY21WbGRHbHRaWE1Bb01zaThhRmtJazBIQUFDYUhXd0FZUUJ1QVBRQVhnY0FvbjBxWTJSbmM2WWRxUjJ4SGJjZFl3QUFvS2dxYndCMEFHK2dmeXB5b0lFcUFLQ0RLbVhnMmlJQS9uTUFBS0NUS29BQ1lXUmxaM01Bd0IzR0hjb2QxaDNaSFhBQWNBQnlBRzhBK0FDbUhHOEFkQUFBb05ZaWNRQUFBV2R4engzU0hYUUE4Z0JHQjJjQWRBRHlBSFFjZEFEeUFGTUhhUUR0QUdNSGdBRnBiSElBNGgzbUhlb2Q4eUZvZEFDZ2ZDbHZBRzhBOGdES0JnRGdOZGdwM1VXZ2RpSUFvSkVxWVFIMUhmNGRjZ0FBQVdSMVlCMzVIV3lndkNFQW9Hb3BiQUJyQUFDZ2hDVmpBSGtBV1dRQW9tb2lZV05vZEF3ZUR4NFZIaGtlY2dEeUFHc2Rid0J5QUc0QVpRRHlBR0FXNFNGeVpBQ2dheWx5QUdrQUFLRDZKUUFCYVc4aEhpUWU1Q0Z2ZEVCaDlTRnpkR0dnc0NQaklXaGxBS0N3SXdBQ1JXRmxjek1lTlI0OEhrRWVBS0JvSW5BQWNLQ0pLdkloYjNnQW9Ja3FjYUNIS3ZHZ2h5bzBIbWtBYlFBQW9PWWlBQVJoWW01dmNIUjNlbEllWEI1ZkhvVWVsaDZtSHFzZXRCNEFBVzV5Vmg1WkhtY0FBS0RzSjNJQUFLRDlJWElBNndDd0JtY0FnQUZzYlhJQVpoNTJIbnNlNVNGbWRBQUJZWEtJQjJ3ZWFRQm5BR2dBZEFCaEFISUFjZ0J2QVBjQWt3ZmhJbkJ6ZEc4QW9Qd25hUUJuQUdnQWRBQmhBSElBY2dCdkFQY0FtZ2R3STJGeWNtOTNBQUFCYkhLTkhwRWVaUUJtQVBRQXhoeHBJbWRvZEFBQW9Ld2hnQUZoWm13QW5CNmZIcUllY2dBQW9JVXBBT0ExMkYzZGRRQnpBQUNnTFNwcEltMWxjd0FBb0RRcVlRR3ZIck1lY3dCMEFBQ2dGeUxoQUlvT1phSEtKYmtlUmhMdUlXZGxBS0RLSldFQWNnQnNvQ2dBZEFBQW9KTXBnQUpoWTJodGRBRE1IczhlMVI3Ykh0MGVjZ0R5QUowR2J3QnlBRzRBWlFEeUFOWVdZUUJ5QUdTZ3l5RUFvRzBwQUtBT0lISUFhUUFBb0w4aUFBTmhZMmhwY1hUckh1OGUxUWZ6SHYwZUJoL3hJWFZ2QUtBNUlISUFBT0ExMk1IY2JRRGxvWElpK2g0QUFQd2VBS0NOS2dDZ2p5b0FBV0oxOXh3QkgyOEFjcUFZSUFDZ0dpRHlJVzlyUW1FQWhEd0FPMk5rYUdsc2NYSkNCaGNmeGgwZ0h5UWZLQjhzSHpFZkFBRmphUnNmSFI4QW9LWXFjZ0FBb0hrcWNnQmxBT1VBa3gzdElXVnpBS0RKSXVFaGNuSUFvSFlwZFNKbGMzUUFBS0I3S2dBQlVHazFIemtmWVFCeUFBQ2dsaWxsb2NNbEFnZGZFbklBQUFGa2RVSWZSeDl6SW1oaGNnQUFvRW9wNkNGaGNnQ2daaWtBQVdWdVR4OVdIM0lqZEc1bGNYRUFBT0JvSWdEK3hRQlVId0FIUkdGalpHVm1hR2xzYm05d2MzVnVIM0lmb2grckg2OGZ0eCs3SDc0ZjVoL3VIL01mQndqL0h3c2d4Q0Z2ZEFDZ09pSUFBbU5zY0hKNUgzMGZpUitlSDNJQU80Q3ZBSzlBQUFGbGRJRWZneDhBb0VJbVphQWdKM01BWlFBQW9DQW5jNkNtSVhRQWJ3Q0FvYVloWkd4MUFKUWZtQitjSDI4QWR3RHVBSGtEWlFCbUFQUUE2Z2J3QU9rTzZ5RmxjZ0NncmlVQUFXOTVwaCtxSCswaGJXRUFvQ2txUEdUaElYTm9BS0FVSU9FbGMzVnlaV1JoYm1kc1pRQ2dJU0p5QUFEZ05kZ3EzVzhBQUtBbklZQUJZMlJ1QU1RZnlSL2JIM0lBYndBN2dMVUF0VUJob2lNaTBCOEFBTk1mMXg5ekFQUUFLeEZwQUhJQUFLRHdLbThBZEFBN2dMY0F0MEIxQUhNQTRxRVNJaDRUQUFEakgzV2dPQ0lBb0NvcVl3SHFIKzBmY0FBQW9Oc3E4Z0IrR25BQWJBQjFBUE1BQ0FnQUFXUnc5eC83SCtVaGJITUFvS2NpWmdBQTREWFlYdDBBQVdOMEF5QUhJSElBQU9BMTJNTGM4Q0Z2Y3dDZ1BpSnNvYndERUNBVklQUWlhVzFoY0FDZ3VDSmhBUEFBRXlBQURFZE1VbFpoWW1Oa1pXWm5hR2xxYkcxdmNISnpkSFYyZHp3Z1J5Qm1JRzBnZVNDcUlMZ2cyaURlSUJFaEZTRXlJVU1oVFNGUUlad2hueUhTSVFBaUl5S0xJckVpdnlJVUl3QUJaM1JBSUVNZ0FPRFpJamdEOXVCckl0SWdCd21BQVdWc2RBQk5JRjhnWWlCbUFIUUFBQUZoY2xNZ1dDQnlJbkp2ZHdBQW9NMGg2U1JuYUhSaGNuSnZkd0NnemlFQTROZ2lPQVAyNEdvaTBpQmZDZWtrWjJoMFlYSnliM2NBb004aEFBRkVaSEVnZFNEaElYTm9BS0N2SXVFaGMyZ0FvSzRpZ0FKaVkyNXdkQUNDSUlZZ2lTQ05JS0lnYkFCaEFBQ2dCeUwxSVhSbFJHRm5BQURnSUNMU0lBQ2lTU0pGYVc5d2xTQ1lJSndnbmlBQTRIQXFPQU5rQUFEZ1N5STRBM01BU1dGeUFHOEErQUF5Q25VQWNnQmhvRzRtYkFEem9HNG1td2p6QWE4Z0FBQ3pJSEFBTzRDZ0FLQkFiUUJ3QU9YZ1RpSTRBeW9KZ0FKaFpXOTFlUURCSU1vZ3pTRFdJTmtnOEFIR0lBQUF5Q0FBb0VNcWJ3QnVBRWhoNUNGcGJFWmhiZ0JuQUdTZ1J5SnZBSFFBQU9CdEtqZ0RjQUFBb0VJcVBXVGhJWE5vQUtBVElBQ2pZQ0pCWVdSeGMzanBJTzBnK1NEK0lBSWhEQ0Z5QUhJQUFLRFhJWElBQUFGb2N2SWc5U0JyQUFDZ0pDbHZvSmNoOXdBR0QyOEFkQUFBNEZBaU9BTjFBR2tBOWdDN0NBQUJaV2tHSVFvaFlRQnlBQUNnS0NudEFOOEk2U0Z6ZFBPZ0JDTGxDSElBQU9BMTJDdmRBQUpGWlhOMC93Z2NJU3NoTGlIeG9YRWlJaUVBQUJNSjhhRnhJZ0FKQUFBbklXd0FZUUJ1QVBRQUV3bHBBTzBBR1FseW9HOGlBS0J2SW9BQlFXRndBRGdoT3lFL0lYSUE4Z0JlSUhJQWNnQUFvSzRoWVFCeUFBQ2c4aXB6b2dzaVNpRUFBQUFBeHd0a29Qd2lBS0Q2SW1NQWVRQmFaSUFEUVVWaFpHVnpkQUJjSVY4aFlpRm1JV2toa3lHV0lYSUE4Z0JYSUFEZ1ppSTRBM0lBY2dBQW9Kb2hjZ0FBb0NVZ2dLRndJbVp4Y3dCd0lZUWhqaUYwQUFBQllYSjFJWG9oY2dCeUFHOEE5d0JsSVdrQVp3Qm9BSFFBWVFCeUFISUFid0QzQUQ0aDhhRndJbUFoQUFDS0lXd0FZUUJ1QVBRQVp3bHo0SDBxT0FNQW9HNGlhUUR0QUcwSmNxQnVJbWtBNWFEcUlrVUphUURrQURvS0FBRndkS01ocHlGbUFBRGdOZGhmM1lDQnJBQTdhVzRBcmlHdkljY2hyRUJ1QUlDaENTSkZaSFlBdHlHNkliOGhBT0Q1SWpnRGJ3QjBBQURnOVNJNEErRUIxZ2pFSWNZaEFLRDNJZ0NnOWlKcEFIYWdEQ0xoQWFnSnp5SFJJUUNnL2lJQW9QMGlnQUZoYjNJQTJDSHNJZkVoY2dDQW9TWWlZWE4wQU9BaDVTSHBJV3dBYkFCbEFPd0F5d2hzQUFEZy9TcmxJQURnQWlJNEEyd2lhVzUwQUFDZ0ZDcmpvWUFpOXlFQUFQb2hkUURsQUpzSlkrQ3ZLamdEWmFDQUl2RUFrd2tBQWtGaGFYUUhJZ29pRnlJZUluSUE4Z0JzSUhJQWNnQUFvWnNoWTNjUkloUWlBT0F6S1RnREFPQ2RJVGdEWnlSb2RHRnljbTkzQUFDZ215RnlBR2tBNWFEcklyNEpnQU5qYUdsdGNIRjFBQzhpUENKSElwd2hUU0pRSWxvaWdLR0JJbU5sY2dBMkl2MEpPU0oxQU9VQUJnb0E0RFhZdzl6dklYSjBiUUtkSVFBQUFBQkVJbUVBY2dEaEFPRWhiUUJsb0VFaThhQkVJaVlLWVFEeUFNc0ljd0IxQUFBQlluQldJbGdpNVFEVUNlVUEzd21BQVdKamNBQmdJbk1pZUNLQW9ZUWlSV1Z6QUdjaTdnbHFJZ0RneFNvNEEyVUFkQUJsNElJaTBpQnhBUEdnaUNKb0ltTUFaYUNCSXZFQS9nbUFvWVVpUldWekFIOGlGZ3FDSWdEZ3hpbzRBMlVBZEFCbDRJTWkwaUJ4QVBHZ2lTS0FJZ0FDWjJsc2NwSWlsQ0thSXB3aTdBQU1DV3dBWkFCbEFEdUE4UUR4UU9jQVd3bHBJMkZ1WjJ4bEFBQUJiSEtrSXFvaTVTRm1kR1dnNmlMeEFFVUphU0puYUhRQVphRHJJdkVBdmdsdG9MMERBS0VqQUdWenVDSzhJbklBYndBQW9CWWhjQUFBb0FjZ2dBUkVTR0ZrWjJsc2NuTUF6aUxTSXRZaTJpTGVJdWdpN1NJQ0l3OGo0U0Z6YUFDZ3JTTGhJWEp5QUtBRUtYQUFBT0JOSXRJZzRTRnphQUNnckNJQUFXVjA0aUxsSWdEZ1pTTFNJQURnUGdEU0lHNGlabWx1QUFDZzNpbUFBVUZsZEFEekl2Y2kraUp5QUhJQUFLQUNLUURnWkNMU0lITGdQQURTSUdrQVpRQUE0TFFpMGlBQUFVRjBCaU1LSTNJQWNnQUFvQU1wOGlGcFpRRGd0U0xTSUdrQWJRQUE0RHdpMGlDQUFVRmhiZ0FhSXg0aktpTnlBSElBQUtEV0lYSUFBQUZvY2lNakppTnJBQUNnSXlsdm9KWWg5d0QvRHVVaFlYSUFvQ2NwVXhKcUZBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVZDTUFBRjRqYVNOL0k0SWpqU09lSThBVUFBQUFBS1lqd0NNQUFOb2ozeU1BQU84akhpUXZKRDhrUkNRQUFXTnpWeU5zRkhVQWRBQmxBRHVBOHdEelFBQUJhWGxoSTJjamNnQmpvSm9pTzREMEFQUkFQbVNBQW1GaWFXOXpBSEVqZENOM0kzRUJlaU56QU9nQWRoVHNJV0ZqVVdGMkFBQ2dPQ3J2SVd4a0FLQzhLZXdoYVdkVFlRQUJZM0tGSTRramFRQnlBQUNndnlrQTREWFlMTjF2QTVRakFBQUFBSllqQUFDY0kyNEEyMkpoQUhZQVpRQTdnUElBOGtBQW9NRXBBQUZpYmFFampBcGhBSElBQUtDMUtRQUNZV05wZEt3anJ5TzZJNzBqY2dEeUFGa1VBQUZwY3JNanRpTnlBQUNndmludklYTnpBS0M3S1c0QTVRRFpDZ0Nnd0NtQUFXRmxhUURGSThnanl5TmpBSElBVFdGbkFHRUF5V09BQVdOa2JnRFJJOVFqMWlQeUlXOXV2Mk1Bb0xZcGRRRHpBSGdCY0FCbUFBRGdOZGhnM1lBQllXVnNBT1FqNXlQckkzSUFBS0MzS1hJQWNBQUFvTGtwZFFEekFId0JBS01vSW1Ga2FXOXpkdmtqL0NNUEpCTWtGaVFiSkhJQThnQmVGSUNoWFNwbFptMEFBeVFKSkF3a2NnQnZvRFFoWmdBQW9EUWhPNENxQUtwQU80QzZBTHBBNXlGdlpnQ2d0aUp5QUFDZ1ZpcHNJbTl3WlFBQW9GY3FBS0JiS29BQlkyeHZBQ01rSlNRckpQSUFDQ1JoQUhNQWFBQTdnUGdBK0VCc0FBQ2dtQ0pwQUd3Qk15UTRKR1FBWlFBN2dQVUE5VUJsQUhNQVlhQ1hJbk1BQUtBMkttMEFiQUE3Z1BZQTlrRGlJV0Z5QUtBOUkrRUtYaVFBQUhva0FBQjhKSlFrQUFDWUpLa2tBQUFBQUxVa0VRc0FBUEFrQUFBQUFBUWxlaVVBQUlNbGNnQ0FvU1VpWVhOMEFHVWtieVFCQ3dDQnRnQTdiR29rYXlTMlFHd0FaUURzQUJnRGFRSjFKQUFBQUFCNEpHMEFBS0R6S2dDZy9TcDVBRDlrY2dDQUFtTnBiWEIwQUlVa2lDU0xKSmtTanlSdUFIUUFKV0J2QUdRQUxtQnBBR3dBQUtBd0lPVWhibXNBb0RFZ2NnQUE0RFhZTGQyQUFXbHRid0NkSktBa3BDUjJvTVlEMVdOdEFHRUE5QUQrQjI0QVpRQUFvQTRtOUtIQUE2NGtBQUMwSkdNamFHWnZjbXNBQUtEVUl0WmpBQUZoZGJna3hDUnVBQUFCWTJ1OUpNSWthd0Jvb0E4aEFLQU9JZllBYVJwekFBQ2tLd0JoWW1Oa1pXMXpkTk1rSVJQWEpOc2s0U1RqSk9jazZ5VGpJV2x5QUtBaktta0FjZ0FBb0NJcUFBRnZkWXNXM3lRQW9DVXFBS0J5S200QU80Q3hBTEZBYVFCdEFBQ2dKaXAzQUc4QUFLQW5Lb0FCYVhCMUFQVWsraVQrSk80aWRHbHVkQUNnRlNwbUFBRGdOZGhoM1c0QVpBQTdnS01BbzBDQXBIb2lSV0ZqWldsdWIzTjFBQk1sRlNVWUpSc2xUQ1ZSSlZrbFNTVjFKUUNnc3lwd0FBQ2d0eXAxQU9VQVB3dGpvSzhxZ0tKNkltRmpaVzV6QUNjbExTVTBKVFlsU1NWd0FIQUFjZ0J2QVBnQUZ5VjFBSElBYkFCNUFHVUE4UUEvQy9FQU9BdUFBV0ZsY3dBOEpVRWxSU1h3SW5CeWIzZ0FvTGtxY1FCeEFBQ2d0U3BwQUcwQUFLRG9JbWtBN1FCRUMyMEFaUUR6b0RJZ0lndUFBVVZoY3dCREpWY2xSU1h3QUVBbGdBRmtabkFBVHd0ZkpYRWxnQUZoYkhNQVpTVnBKVzBsN0NGaGNnQ2dMaVBwSVc1bEFLQVNJL1VoY21ZQW9CTWpkS0FkSXU4QVdRdnlJV1ZzQUtDd0lnQUJZMmw5SllFbGNnQUE0RFhZeGR6SVkyNGlZM053QUFDZ0NDQUFBMlpwYjNCemRaRWxLeHVWSlpvbG55V2tKWElBQU9BMTJDN2RjQUJtQUFEZ05kaGkzWElpYVcxbEFBQ2dWeUJqQUhJQUFPQTEyTWJjZ0FGaFpXOEFxaVc2SmNBbGRBQUFBV1ZwcnlXMkpYSUFiZ0JwQUc4QWJnRHpBQmtGYmdCMEFBQ2dGaXB6QUhRQVphQS9BUEVBQ1JqMEFHMExnQXBCUWtoaFltTmtaV1pvYVd4dGJtOXdjbk4wZFhnQTR5WHlKZllsK2lWcEpwQW1waWE5SnRVbTVpYjRKbG9uYUNkeEozVW5uaWV0SjdFbnlDZmlKK2NuZ0FGaGNuUUE2U1hzSmU0bGNnRHlBSmtNOGdENkF1RWhhV3dBb0J3cFlRQnlBUElBM0JWaEFISUFBS0JrS1lBRFkyUmxibkZ5ZEFBR0poQW1FeVlZSmlZbUt5WmFKZ0FCWlhVS0pnMG1BT0E5SWpFRGRBQmxBRlZoYVFEakFDQU43U0p3ZEhsMkFLQ3pLV2NBZ0tIcEoyUmxiQUFnSmlJbUpDWUFvSklwQUtDbEtlVUE5d3QxQUc4QU80QzdBTHRBY2dBQXBaSWhZV0pqWm1oc2NITjBkejBtUUNaRkprY21TaVpNSms0bVVTWlZKbGdtY0FBQW9IVXBacURsSVhNQUFLQWdLUUNnTXlsekFBQ2dIaW5yQUxrYThBQ1ZIbXdBQUtCRktXa0FiUUFBb0hRcGJBQUFvS01oQUtDZElRQUJZV2xlSm1JbWFRQnNBQUNnR2lsdkFHNmdOaUpoQUd3QTh3QjJDNEFCWVdKeUFHOG1jaVoySm5JQThnQXZFbklBYXdBQW9ITW5BQUZoYTNvbWdTWmpBQUFCWld0L0pvQW1mV0JkWUFBQlpYT0ZKb2NtQUtDTUtXd0FBQUZrZFl3bWppWUFvSTRwQUtDUUtRQUNZV1YxZVpjbW1pYWpKcVVtOGlGdmJsbGhBQUZrYVo0bW9TWnBBR3dBVjJIc0FBOE00Z0NBSmtCa0FBSmpiSEZ6clNhd0pyVW11aVpoQUFDZ055bGtJbWhoY2dBQW9Ha3BkUUJ2QVBLZ0hTQ2pBV2dBQUtDeklZQUJZV05uQU1NbTBpYVVDMndBZ0tFY0lXbHdjd0RMSnM0bWlneHVBT1VBb0F4aEFISUE5QURhQzNRQUFLQ3RKWUFCYVd4eUFOc20zeWJqSnZNaGFIUUFvSDBwYndCdkFQSUFOZ3dBNERYWUw5MEFBV0Z2NmliMUpuSUFBQUZrZGU4bThTWUFvTUVoYktEQUlRQ2diQ2wyb01FRDhXT0FBV2R1Y3dEK0prNG5VQ2RvQUhRQUFBTmhhR3h5YzNRS0p4SW5JU2MxSnowblJ5ZHlJbkp2ZHdCMG9KSWhZUURwQUZZbVlTTnljRzl2YmdBQUFXUjFHaWNlSjI4QWR3RHVBUEFtY0FBQW9NQWg1U0ZtZEFBQllXZ25KeTBuY2dCeUFHOEFkd0R6QUFrTVlRQnlBSEFBYndCdkFHNEE4d0FUQkdrbFoyaDBZWEp5YjNkekFBQ2d5U0Z4QUhVQWFRQm5BR0VBY2dCeUFHOEE5d0JaSnVna2NtVmxkR2x0WlhNQW9Nd2lad0RhWW1rQWJnQm5BR1FBYndCMEFITUFaUUR4QUJ3WWdBRmhhRzBBWUNkakoyWW5jZ0R5QUFrTVlRRHlBQk1FQUtBUElHOGlkWE4wQUdHZ3NTUGpJV2hsQUtDeEkrMGhhV1FBb080cUFBSmhZbkIwZkNlR0o0a25tU2NBQVc1eWdDZURKMmNBQUtEdEozSUFBS0QrSVhJQTZ3QWNESUFCWVdac0FJOG5raWVWSjNJQUFLQ0dLUURnTmRoajNYVUFjd0FBb0M0cWFTSnRaWE1BQUtBMUtnQUJZWENpSjZnbmNnQm5vQ2tBZEFBQW9KUXA3eUpzYVc1MEFLQVNLbUVBY2dEeUFEd25BQUpoWTJoeHVDZThKNkVNd0NmeElYVnZBS0E2SUhJQUFPQTEyTWZjQUFGaWRZQW14Q2R2QVBLZ0dTQ29BWUFCYUdseUFNNG4waWZXSjNJQVpRRGxBRTBuN1NGbGN3Q2d5aUpwQUlDaHVTVmxabXdBWEF4akV0NG45Q0Z5YVFDZ3ppbnNJblZvWVhJQW9HZ3BBS0FlSVdFTkJTZ0pLQTBvU3loVktJWW9BQUNMS0xBb0FBQUFBT01vNXlnQUFCQXBKQ2t4S1cwcGNTbUhLYVlwQUFDWUtnQUFBQUN4S21NaWRYUmxBRnRoY1FCMUFPOEFCUitBcEhzaVJXRmpaV2x1Y0hONUFCd29IaWduS0Nvb0x5Z3lLRUVvUmloSktBQ2d0Q3J3QVNNb0FBQWxLQUNndUNwdkFHNEFZV0YxQU9VQWd3MWtvTEFxYVFCc0FGOWhjZ0JqQUYxaGdBRkZZWE1BT0NnNktEMG9BS0MyS25BQUFLQzZLbWtBYlFBQW9Pa2k3eUpzYVc1MEFLQVRLbWtBN1FDSURVRmtid0IwQUdLaXhTS1JGZ0FBQUFCVEtBQ2daaXFBQTBGaFkyMXpkSGdBWUNoa0tHOG9jeWgxS0hrb2dpaHlBSElBQUtEWUlYSUFBQUZvY21rb2F5anJBSkFhYjZDWUlmY0F6QWQwQUR1QXB3Q25RR2tBTzJEM0lXRnlBS0FwS1cwQUFBRnBibjRvelFCdUFIVUE4d0RPQUhRQUFLQTJKM0lBNytBMTJERGRJeGtBQW1GamIzbVJLSlVvblNpc0tISUFjQUFBb0c4bUFBRm9lWmtvbkNoakFIa0FTV1JJWkhJQWRBQnRBcVVvQUFBQUFLZ29hUURrQUZzUFlRQnlBR0VBN0FCc0pEdUFyUUN0UUFBQloyMnpLTHNvYlFCaEFBQ2h3d05tZHJvb3VpakNZNENqUENKa1pXZHNibkJ5QU1nb3pDalBLTk1vMXlqYUtONG9id0IwQUFDZ2FpcnhvRU1pQ3c1Rm9KNHFBS0NnS2tXZ25Tb0FvSjhxWlFBQW9FWWk3Q0YxY3dDZ0pDcmhJWEp5QUtCeUtXRUFjZ0R5QVB3TUFBSmhaV2wwN1NqOEtBRXBDQ2tBQVd4ejhTajRLR3dBY3dCbEFIUUFiUURwQUg4b2FBQndBQUNnTXlyd0ltRnljMndBb09RcEFBRmtiRm9QQlNsbEFBQ2dJeU5sb0tvcWM2Q3NLZ0RnckNvQS9vQUJabXh3QUJVcEdDa2ZLZlFoWTNsTVpHS2dMd0Job01RcGNnQUFvRDhqWmdBQTREWFlaTjFoQUFBQlpISW9LUmNEWlFCekFIV2dZQ1pwQUhRQUFLQmdKb0FCWTNOMUFEWXBSaWxoS1FBQllYVTZLVUFwY0FCem9KTWlBT0NUSWdEK2NBQnpvSlFpQU9DVUlnRCtkUUFBQVdKd1N5bFdLUUNoanlKbGN6NE5VQ2xsQUhRQVphQ1BJdkVBUHcwQW9aQWlaWE5JRFZzcFpRQjBBR1dna0NMeEFFa05BS0doSldGbVppbGJCSElBWlFGcktWd0VBS0NoSldFQWNnRHlBQU1OQUFKalpXMTBkeWw3S1g4cGdpbHlBQURnTmRqSTNIUUFiUUR1QU00QWFRRHNBQVlwWVFCeUFPWUFWdzBBQVdGeWlpbU9LWElBNXFBR0poRVNBQUZoYnBJcG95bHBJbWRvZEFBQUFXVndtU21nS1hBQWN3QnBBR3dBYndEdUFOa1hhQURwQUtBa2N3Q3ZZSUFDWW1OdGJuQUFyaW44S1k0TkpTb29LZ0NrZ2lKRlpHVnRibkJ5Yzd3cHZpbkNLY2dwekNuVUtkZ3AzQ2tBb01VcWJ3QjBBQUNndlNwa29JWWlid0IwQUFDZ3d5cjFJV3gwQUtEQktnQUJSV1hRS2RJcEFLRExLZ0NnaWlMc0lYVnpBS0MvS3VFaGNuSUFvSGtwZ0FGbGFYVUE0aW54S2ZRcGRBQUFvWUlpWlc3b0tld3BjUUR4b0lZaXZTbGxBSEVBOGFDS0l0RXBiUUFBb01jcUFBRmljUGdwK2lrQW9OVXFBS0RUS21NQWdLSjdJbUZqWlc1ekFBY3FEU29VS2hZcVJpaHdBSEFBY2dCdkFQZ0FJeWgxQUhJQWJBQjVBR1VBOFFDRERmRUFmQTJBQVdGbGN3QWNLaUlxUFNod0FIQUFjZ0J2QVBnQVBDaHhBUEVBT1NobkFBQ2dhaVlBcG9NaU1USXpSV1JsYUd4dGJuQnpQQ28vS2tJcVJTcEhLbElxV0NwakttY3FheXB6S25jcU80QzVBTGxBTzRDeUFMSkFPNEN6QUxOQUFLREdLZ0FCYjNOTEtrNHFkQUFBb0w0cWRRQmlBQUNnMkNwa29JY2lid0IwQUFDZ3hDcHpBQUFCYjNWZEttQXFiQUFBb01rbllnQUFvTmNxNFNGeWNnQ2dleW4xSVd4MEFLRENLZ0FCUldWdktuRXFBS0RNS2dDZ2l5THNJWFZ6QUtEQUtvQUJaV2wxQUgwcWpDcVBLblFBQUtHREltVnVneXFIS25FQThhQ0hJa1lxWlFCeEFQR2dpeUp3S20wQUFLRElLZ0FCWW5DVEtwVXFBS0RVS2dDZzFpcUFBVUZoYmdDZEtxRXFyQ3B5QUhJQUFLRFpJWElBQUFGb2NxWXFxQ3JyQUpVYWI2Q1pJZmNBeFFmM0lXRnlBS0FxS1d3QWFRQm5BRHVBM3dEZlFPRUx6eXJaS3R3cTZTcnNLdkVxQUFEMUtqUXJBQUFBQUFBQUFBQUFBRXdyYkNzQUFIRXJ2U3NBQUFBQUFBRFJLM0lDMUNvQUFBQUEyQ3JuSVdWMEFLQVdJOFJqY2dEckFPVUtnQUZoWlhrQTRTcmtLdWNxOGlGdmJtVmg1Q0ZwYkdOaFFtUnZBUFFBSWc1c0luSmxZd0FBb0JVamNnQUE0RFhZTWQwQUFtVnBhMi83S2hJcktDc3VLL0lCQUNzQUFBa3JaUUFBQVRSbTZnMEVLMjhBY2dEbEFPc05ZUUJ6b3JnREVDc0FBQUFBRWl0NUFHMEEwV01BQVdOdUZpc2xLMnNBQUFGaGN4c3JJU3R3QUhBQWNnQnZBUGdBRnc1cEFHMEFBS0E4SW5NQThBRDlEUUFCWVhNc0t5RXI4QUFYRG5JQWJnQTdnUDRBL2tEc0FUZ3JPeXN3RzJRQTVRQm5BbVVBY3dDQWdkY0FPMkprQUVNclJDdEpLOWRBWWFDZ0luSUFBS0F4S2dDZ01DcUFBV1Z3Y3dCUksxTXJhU3ZoQUFraDRxS2tJbHNyWHlzQUFBQUFZeXR2QUhRQUFLQTJJMmtBY2dBQW9QRXFiK0ExMkdYZGNnQnJBQUNnMmlyaEFIZ29jaUpwYldVQUFLQTBJSUFCWVdsd0FIWXJlU3UzSzJRQTVRQytEWUFEWVdSbGJYQnpkQUNGSzZNcm1pdW5LNndyc0N1eksyNGlaMnhsQUFDaXRTVmtiSEZ5a0N1VUs1b3JuQ3Z2SVhkdUFLQy9KZVVoWm5SbG9NTWw4UUFDQndDZ1hDSnBJbWRvZEFCbG9Ma2w4UUJkREc4QWRBQUFvT3dsYVNKdWRYTUFBS0E2S3V3aGRYTUFvRGtxWWdBQW9NMHA2U0Z0WlFDZ095cmxJbnBwZFcwQW9PSWpnQUZqYUhRQXdpdktLODByQUFGeWVjWXJ5U3NBNERYWXlkeEdaR01BZVFCYlpQSWhiMnRuWVFBQmFXL1VLOWNyZUFEMEFORVJhQ0psWVdRQUFBRnNjdDRyNXl0bEFHWUFkQUJoQUhJQWNnQnZBUGNBWFFicEpHZG9kR0Z5Y205M0FLQ2dJUUFKUVVoaFltTmtabWRvYkcxdmNISnpkSFYzQ2l3TkxCRXNIU3duTERFc1FDeExMRklzWWl4NkxJUXNqeXpMTE9nczdTei9MQW90Y2dEeUFBa0RZUUJ5QUFDZ1l5a0FBV055RlN3YkxIVUFkQUJsQUR1QStnRDZRUElBQ1ExeUFPTUJJeXdBQUNVc2VRQmVaSFlBWlFCdFlRQUJhWGtyTERBc2NnQmpBRHVBK3dEN1FFTmtnQUZoWW1nQU55dzZMRDBzY2dEeUFORU83Q0ZoWTNGaFlRRHlBT0FPQUFGcGNrUXNTQ3p6SVdoMEFLQitLUURnTmRneTNYSUFZUUIyQUdVQU80RDVBUGxBWVFGV0xGOHNjZ0FBQVd4eVdpeGNMQUNndnlFQW9MNGhiQUJyQUFDZ2dDVUFBV04wWml4MkxHOENiQ3dBQUFBQWN5eHlBRzRBWmFBY0kzSUFBS0FjSTI4QWNBQUFvQThqY2dCcEFBQ2crQ1VBQVdGc2ZpeUJMR01BY2dCcllUdUFxQUNvUUFBQlozQ0lMSXNzYndCdUFITmhaZ0FBNERYWVp0MEFBMkZrYUd4emRaa3NuaXluTExnc3V5ekZMSElBY2dCdkFQY0FDUTF2QUhjQWJnQmhBSElBY2dCdkFQY0EyQTVoSTNKd2IyOXVBQUFCYkhLdkxMTXNaUUJtQVBRQVd5eHBBR2NBYUFEMEFGMHNkUUR6QUtZT2FRQUFvY1VEYUd6QkxNSXMwbU52QUc0QXhXUHdJMkZ5Y205M2N3Q2d5Q0dBQVdOcGRBRFJMT0VzNUN4dkF0Y3NBQUFBQU40c2NnQnVBR1dnSFNOeUFBQ2dIU052QUhBQUFLQU9JMjRBWndCdllYSUFhUUFBb1BrbFl3QnlBQURnTmRqSzNJQUJaR2x5QVBNczl5ejZMRzhBZEFBQW9QQWk3Q0ZrWldsaGFRQm1vTFVsQUtDMEpRQUJZVzBETFFZdGNnRHlBTW9zYkFBN2dQd0EvRURoSW01bmJHVUFvS2NwZ0FkQlFrUmhZMlJsWm14dWIzQnljM29BSnkwcUxUQXROQzJiTFowdG9TMi9MY010eHkzVExkZ3QzQzNnTGZ3dGNnRHlBQkFEWVFCeUFIYWc2Q29Bb09rcVlRQnpBT2dBL2dJQUFXNXlPQzA4TGVjaGNuUUFvSndwZ0FObGEyNXdjbk4wQUprcFNDMU5MVlF0WGkxaUxZSXRZUUJ3QUhBQTRRQWFIRzhBZEFCb0FHa0FiZ0RuQUtFWGdBRm9hWElBb1NtekpGb3Rid0J3QVBRQWRDVm9vSlVoN3dENEpnQUJhWFZtTFdvdFp3QnRBT0VBdXlnQUFXSndiaTE0TFhNalpYUnVaWEVBY2VDS0lnRCtBT0RMS2dEK2N5TmxkRzVsY1FCeDRJc2lBUDRBNE13cUFQNEFBV2h5aGkyS0xXVUFkQURoQUJJcmFTTmhibWRzWlFBQUFXeHlraTJXTGVVaFpuUUFvTElpYVNKbmFIUUFBS0N6SW5rQU1tVGhJWE5vQUtDaUlvQUJaV3h5QUtjdHRDMjRMV0tpS0NLdUxRQUFBQUN5TFdFQWNnQUFvTHNpY1FBQW9Gb2k3Q0ZwY0FDZzdpSUFBV0owdkMxZUQyRUE4Z0JmRDNJQUFPQTEyRFBkZEFCeUFPa0FsUzF6QUhVQUFBRmljTTB0MEMwQTRJSWkwaUFBNElNaTBpQndBR1lBQU9BMTJHZmRjZ0J2QVBBQVdRdDBBSElBNlFDYUxRQUJZM1hrTGVndGNnQUE0RFhZeTl3QUFXSnc3QzMwTFc0QUFBRkZaWFV0OFMwQTRJb2lBUDV1QUFBQlJXVi9MZmt0QU9DTElnRCs2U0puZW1GbkFLQ2FLWUFEWTJWbWIzQnljd0FOTGhBdUpTNHBMaU11TGk0MEx1a2hjbU4xWVFBQlpHa1VMaUV1QUFGaVp4Z3VIQzVoQUhJQUFLQmZLbVVBY2FBbklnQ2dXU0xsSVhKd0FLQVlJWElBQU9BMTJEVGRjQUJtQUFEZ05kaG8zV1dnUUNKaEFIUUE2QUJxRDJNQWNnQUE0RFhZek56akN1UVJVQzRBQUZRdUFBQllMbUl1QUFBQUFHTXViUzV3TG5RdUFBQUFBSWd1a2k0QUFKb3VKeElxRW5RQWNnRHBBQjBTY2dBQTREWFlOZDBBQVVGaFd5NWVMbklBOGdEbkFuSUE4Z0NUQjc1akFBRkJZV1l1YVM1eUFQSUE0QUp5QVBJQWpBZGhBUEFBZWg1cEFITUFBS0Q3SW9BQlpIQjBBUGdSZVM2RExnQUJabXg5TG9BdUFPQTEyR25kZFFEekFQOFJhUUJ0QU9VQUJCSUFBVUZoaXk2T0xuSUE4Z0R1QW5JQThnQ2FCd0FCWTNHVkxnb1NjZ0FBNERYWXpkd0FBWEIwblM2aExtd0FkUUR6QUNVU2NnRHBBQ0FTQUFSaFkyVm1hVzl6ZGJFdXZDN0VMc2d1ekM3UEx0UXUyUzVqQUFBQmRYbTJMcnN1ZEFCbEFEdUEvUUQ5UUU5a0FBRnBlY0F1d3k1eUFHTUFkMkZMWkc0QU80Q2xBS1ZBY2dBQTREWFlOdDFqQUhrQVYyUndBR1lBQU9BMTJHcmRZd0J5QUFEZ05kak8zQUFCWTIzZEx0OHVlUUJPWkd3QU80RC9BUDlBQUFWaFkyUmxabWhwYjNOMzh5NzNMdjh1QWk4TUx4QXZFeThZTHgwdklpOWpJblYwWlFCNllRQUJZWG43THY0dThpRnZibjVoTjJSdkFIUUFmR0VBQVdWMEJpOEtMM1FBY2dEbUFCOFFZUUMyWTNJQUFPQTEyRGZkWXdCNUFEWms1eUp5WVhKeUFLRGRJWEFBWmdBQTREWFlhOTFqQUhJQUFPQTEyTS9jQUFGcWJpWXZLQzhBb0EwZ2FnQUFvQXdnIiksYXA9eXUoIkFBSmhaMnh4QndBUkFCTUFGUUJ0QWcwQUFBQUFBQThBY0FBbVlHOEFjd0FuWUhRQVBtQjBBRHhnOVNGdmRDSmciKTt2YXIgdHQ7KGZ1bmN0aW9uKHIpe3Jbci5WQUxVRV9MRU5HVEg9NDkxNTJdPSJWQUxVRV9MRU5HVEgiLHJbci5GTEFHMTM9ODE5Ml09IkZMQUcxMyIscltyLkJSQU5DSF9MRU5HVEg9ODA2NF09IkJSQU5DSF9MRU5HVEgiLHJbci5KVU1QX1RBQkxFPTEyN109IkpVTVBfVEFCTEUifSkodHR8fCh0dD17fSkpO3ZhciBfZTsoZnVuY3Rpb24ocil7cltyLk5VTT0zNV09Ik5VTSIscltyLlNFTUk9NTldPSJTRU1JIixyW3IuRVFVQUxTPTYxXT0iRVFVQUxTIixyW3IuWkVSTz00OF09IlpFUk8iLHJbci5OSU5FPTU3XT0iTklORSIscltyLkxPV0VSX0E9OTddPSJMT1dFUl9BIixyW3IuTE9XRVJfRj0xMDJdPSJMT1dFUl9GIixyW3IuTE9XRVJfWD0xMjBdPSJMT1dFUl9YIixyW3IuTE9XRVJfWj0xMjJdPSJMT1dFUl9aIixyW3IuVVBQRVJfQT02NV09IlVQUEVSX0EiLHJbci5VUFBFUl9GPTcwXT0iVVBQRVJfRiIscltyLlVQUEVSX1o9OTBdPSJVUFBFUl9aIn0pKF9lfHwoX2U9e30pKTtjb25zdCB2dT0zMjtmdW5jdGlvbiBOaShyKXtyZXR1cm4gcj49X2UuWkVSTyYmcjw9X2UuTklORX1mdW5jdGlvbiBvcChyKXtyZXR1cm4gcj49X2UuVVBQRVJfQSYmcjw9X2UuVVBQRVJfRnx8cj49X2UuTE9XRVJfQSYmcjw9X2UuTE9XRVJfRn1mdW5jdGlvbiB1cChyKXtyZXR1cm4gcj49X2UuVVBQRVJfQSYmcjw9X2UuVVBQRVJfWnx8cj49X2UuTE9XRVJfQSYmcjw9X2UuTE9XRVJfWnx8Tmkocil9ZnVuY3Rpb24gbHAocil7cmV0dXJuIHI9PT1fZS5FUVVBTFN8fHVwKHIpfXZhciBaZTsoZnVuY3Rpb24ocil7cltyLkVudGl0eVN0YXJ0PTBdPSJFbnRpdHlTdGFydCIscltyLk51bWVyaWNTdGFydD0xXT0iTnVtZXJpY1N0YXJ0IixyW3IuTnVtZXJpY0RlY2ltYWw9Ml09Ik51bWVyaWNEZWNpbWFsIixyW3IuTnVtZXJpY0hleD0zXT0iTnVtZXJpY0hleCIscltyLk5hbWVkRW50aXR5PTRdPSJOYW1lZEVudGl0eSJ9KShaZXx8KFplPXt9KSk7dmFyIF90OyhmdW5jdGlvbihyKXtyW3IuTGVnYWN5PTBdPSJMZWdhY3kiLHJbci5TdHJpY3Q9MV09IlN0cmljdCIscltyLkF0dHJpYnV0ZT0yXT0iQXR0cmlidXRlIn0pKF90fHwoX3Q9e30pKTtjbGFzcyBjcHtjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy5kZWNvZGVUcmVlPWUsdGhpcy5lbWl0Q29kZVBvaW50PXQsdGhpcy5lcnJvcnM9bix0aGlzLnN0YXRlPVplLkVudGl0eVN0YXJ0LHRoaXMuY29uc3VtZWQ9MSx0aGlzLnJlc3VsdD0wLHRoaXMudHJlZUluZGV4PTAsdGhpcy5leGNlc3M9MSx0aGlzLmRlY29kZU1vZGU9X3QuU3RyaWN0LHRoaXMucnVuQ29uc3VtZWQ9MH1zdGFydEVudGl0eShlKXt0aGlzLmRlY29kZU1vZGU9ZSx0aGlzLnN0YXRlPVplLkVudGl0eVN0YXJ0LHRoaXMucmVzdWx0PTAsdGhpcy50cmVlSW5kZXg9MCx0aGlzLmV4Y2Vzcz0xLHRoaXMuY29uc3VtZWQ9MSx0aGlzLnJ1bkNvbnN1bWVkPTB9d3JpdGUoZSx0KXtzd2l0Y2godGhpcy5zdGF0ZSl7Y2FzZSBaZS5FbnRpdHlTdGFydDpyZXR1cm4gZS5jaGFyQ29kZUF0KHQpPT09X2UuTlVNPyh0aGlzLnN0YXRlPVplLk51bWVyaWNTdGFydCx0aGlzLmNvbnN1bWVkKz0xLHRoaXMuc3RhdGVOdW1lcmljU3RhcnQoZSx0KzEpKToodGhpcy5zdGF0ZT1aZS5OYW1lZEVudGl0eSx0aGlzLnN0YXRlTmFtZWRFbnRpdHkoZSx0KSk7Y2FzZSBaZS5OdW1lcmljU3RhcnQ6cmV0dXJuIHRoaXMuc3RhdGVOdW1lcmljU3RhcnQoZSx0KTtjYXNlIFplLk51bWVyaWNEZWNpbWFsOnJldHVybiB0aGlzLnN0YXRlTnVtZXJpY0RlY2ltYWwoZSx0KTtjYXNlIFplLk51bWVyaWNIZXg6cmV0dXJuIHRoaXMuc3RhdGVOdW1lcmljSGV4KGUsdCk7Y2FzZSBaZS5OYW1lZEVudGl0eTpyZXR1cm4gdGhpcy5zdGF0ZU5hbWVkRW50aXR5KGUsdCl9fXN0YXRlTnVtZXJpY1N0YXJ0KGUsdCl7cmV0dXJuIHQ+PWUubGVuZ3RoPy0xOihlLmNoYXJDb2RlQXQodCl8dnUpPT09X2UuTE9XRVJfWD8odGhpcy5zdGF0ZT1aZS5OdW1lcmljSGV4LHRoaXMuY29uc3VtZWQrPTEsdGhpcy5zdGF0ZU51bWVyaWNIZXgoZSx0KzEpKToodGhpcy5zdGF0ZT1aZS5OdW1lcmljRGVjaW1hbCx0aGlzLnN0YXRlTnVtZXJpY0RlY2ltYWwoZSx0KSl9c3RhdGVOdW1lcmljSGV4KGUsdCl7Zm9yKDt0PGUubGVuZ3RoOyl7Y29uc3Qgbj1lLmNoYXJDb2RlQXQodCk7aWYoTmkobil8fG9wKG4pKXtjb25zdCBzPW48PV9lLk5JTkU/bi1fZS5aRVJPOihufHZ1KS1fZS5MT1dFUl9BKzEwO3RoaXMucmVzdWx0PXRoaXMucmVzdWx0KjE2K3MsdGhpcy5jb25zdW1lZCsrLHQrK31lbHNlIHJldHVybiB0aGlzLmVtaXROdW1lcmljRW50aXR5KG4sMyl9cmV0dXJuLTF9c3RhdGVOdW1lcmljRGVjaW1hbChlLHQpe2Zvcig7dDxlLmxlbmd0aDspe2NvbnN0IG49ZS5jaGFyQ29kZUF0KHQpO2lmKE5pKG4pKXRoaXMucmVzdWx0PXRoaXMucmVzdWx0KjEwKyhuLV9lLlpFUk8pLHRoaXMuY29uc3VtZWQrKyx0Kys7ZWxzZSByZXR1cm4gdGhpcy5lbWl0TnVtZXJpY0VudGl0eShuLDIpfXJldHVybi0xfWVtaXROdW1lcmljRW50aXR5KGUsdCl7dmFyIG47aWYodGhpcy5jb25zdW1lZDw9dClyZXR1cm4obj10aGlzLmVycm9ycyk9PT1udWxsfHxuPT09dm9pZCAwfHxuLmFic2VuY2VPZkRpZ2l0c0luTnVtZXJpY0NoYXJhY3RlclJlZmVyZW5jZSh0aGlzLmNvbnN1bWVkKSwwO2lmKGU9PT1fZS5TRU1JKXRoaXMuY29uc3VtZWQrPTE7ZWxzZSBpZih0aGlzLmRlY29kZU1vZGU9PT1fdC5TdHJpY3QpcmV0dXJuIDA7cmV0dXJuIHRoaXMuZW1pdENvZGVQb2ludChzcCh0aGlzLnJlc3VsdCksdGhpcy5jb25zdW1lZCksdGhpcy5lcnJvcnMmJihlIT09X2UuU0VNSSYmdGhpcy5lcnJvcnMubWlzc2luZ1NlbWljb2xvbkFmdGVyQ2hhcmFjdGVyUmVmZXJlbmNlKCksdGhpcy5lcnJvcnMudmFsaWRhdGVOdW1lcmljQ2hhcmFjdGVyUmVmZXJlbmNlKHRoaXMucmVzdWx0KSksdGhpcy5jb25zdW1lZH1zdGF0ZU5hbWVkRW50aXR5KGUsdCl7Y29uc3R7ZGVjb2RlVHJlZTpufT10aGlzO2xldCBzPW5bdGhpcy50cmVlSW5kZXhdLGk9KHMmdHQuVkFMVUVfTEVOR1RIKT4+MTQ7Zm9yKDt0PGUubGVuZ3RoOyl7aWYoaT09PTAmJnMmdHQuRkxBRzEzKXtjb25zdCBvPShzJnR0LkJSQU5DSF9MRU5HVEgpPj43O2lmKHRoaXMucnVuQ29uc3VtZWQ9PT0wKXtjb25zdCB1PXMmdHQuSlVNUF9UQUJMRTtpZihlLmNoYXJDb2RlQXQodCkhPT11KXJldHVybiB0aGlzLnJlc3VsdD09PTA/MDp0aGlzLmVtaXROb3RUZXJtaW5hdGVkTmFtZWRFbnRpdHkoKTt0KyssdGhpcy5leGNlc3MrKyx0aGlzLnJ1bkNvbnN1bWVkKyt9Zm9yKDt0aGlzLnJ1bkNvbnN1bWVkPG87KXtpZih0Pj1lLmxlbmd0aClyZXR1cm4tMTtjb25zdCB1PXRoaXMucnVuQ29uc3VtZWQtMSxsPW5bdGhpcy50cmVlSW5kZXgrMSsodT4+MSldLEE9dSUyPT09MD9sJjI1NTpsPj44JjI1NTtpZihlLmNoYXJDb2RlQXQodCkhPT1BKXJldHVybiB0aGlzLnJ1bkNvbnN1bWVkPTAsdGhpcy5yZXN1bHQ9PT0wPzA6dGhpcy5lbWl0Tm90VGVybWluYXRlZE5hbWVkRW50aXR5KCk7dCsrLHRoaXMuZXhjZXNzKyssdGhpcy5ydW5Db25zdW1lZCsrfXRoaXMucnVuQ29uc3VtZWQ9MCx0aGlzLnRyZWVJbmRleCs9MSsobz4+MSkscz1uW3RoaXMudHJlZUluZGV4XSxpPShzJnR0LlZBTFVFX0xFTkdUSCk+PjE0fWlmKHQ+PWUubGVuZ3RoKWJyZWFrO2NvbnN0IGE9ZS5jaGFyQ29kZUF0KHQpO2lmKGE9PT1fZS5TRU1JJiZpIT09MCYmcyZ0dC5GTEFHMTMpcmV0dXJuIHRoaXMuZW1pdE5hbWVkRW50aXR5RGF0YSh0aGlzLnRyZWVJbmRleCxpLHRoaXMuY29uc3VtZWQrdGhpcy5leGNlc3MpO2lmKHRoaXMudHJlZUluZGV4PWhwKG4scyx0aGlzLnRyZWVJbmRleCtNYXRoLm1heCgxLGkpLGEpLHRoaXMudHJlZUluZGV4PDApcmV0dXJuIHRoaXMucmVzdWx0PT09MHx8dGhpcy5kZWNvZGVNb2RlPT09X3QuQXR0cmlidXRlJiYoaT09PTB8fGxwKGEpKT8wOnRoaXMuZW1pdE5vdFRlcm1pbmF0ZWROYW1lZEVudGl0eSgpO2lmKHM9blt0aGlzLnRyZWVJbmRleF0saT0ocyZ0dC5WQUxVRV9MRU5HVEgpPj4xNCxpIT09MCl7aWYoYT09PV9lLlNFTUkpcmV0dXJuIHRoaXMuZW1pdE5hbWVkRW50aXR5RGF0YSh0aGlzLnRyZWVJbmRleCxpLHRoaXMuY29uc3VtZWQrdGhpcy5leGNlc3MpO3RoaXMuZGVjb2RlTW9kZSE9PV90LlN0cmljdCYmIShzJnR0LkZMQUcxMykmJih0aGlzLnJlc3VsdD10aGlzLnRyZWVJbmRleCx0aGlzLmNvbnN1bWVkKz10aGlzLmV4Y2Vzcyx0aGlzLmV4Y2Vzcz0wKX10KyssdGhpcy5leGNlc3MrK31yZXR1cm4tMX1lbWl0Tm90VGVybWluYXRlZE5hbWVkRW50aXR5KCl7dmFyIGU7Y29uc3R7cmVzdWx0OnQsZGVjb2RlVHJlZTpufT10aGlzLHM9KG5bdF0mdHQuVkFMVUVfTEVOR1RIKT4+MTQ7cmV0dXJuIHRoaXMuZW1pdE5hbWVkRW50aXR5RGF0YSh0LHMsdGhpcy5jb25zdW1lZCksKGU9dGhpcy5lcnJvcnMpPT09bnVsbHx8ZT09PXZvaWQgMHx8ZS5taXNzaW5nU2VtaWNvbG9uQWZ0ZXJDaGFyYWN0ZXJSZWZlcmVuY2UoKSx0aGlzLmNvbnN1bWVkfWVtaXROYW1lZEVudGl0eURhdGEoZSx0LG4pe2NvbnN0e2RlY29kZVRyZWU6c309dGhpcztyZXR1cm4gdGhpcy5lbWl0Q29kZVBvaW50KHQ9PT0xP3NbZV0mfih0dC5WQUxVRV9MRU5HVEh8dHQuRkxBRzEzKTpzW2UrMV0sbiksdD09PTMmJnRoaXMuZW1pdENvZGVQb2ludChzW2UrMl0sbiksbn1lbmQoKXt2YXIgZTtzd2l0Y2godGhpcy5zdGF0ZSl7Y2FzZSBaZS5OYW1lZEVudGl0eTpyZXR1cm4gdGhpcy5yZXN1bHQhPT0wJiYodGhpcy5kZWNvZGVNb2RlIT09X3QuQXR0cmlidXRlfHx0aGlzLnJlc3VsdD09PXRoaXMudHJlZUluZGV4KT90aGlzLmVtaXROb3RUZXJtaW5hdGVkTmFtZWRFbnRpdHkoKTowO2Nhc2UgWmUuTnVtZXJpY0RlY2ltYWw6cmV0dXJuIHRoaXMuZW1pdE51bWVyaWNFbnRpdHkoMCwyKTtjYXNlIFplLk51bWVyaWNIZXg6cmV0dXJuIHRoaXMuZW1pdE51bWVyaWNFbnRpdHkoMCwzKTtjYXNlIFplLk51bWVyaWNTdGFydDpyZXR1cm4oZT10aGlzLmVycm9ycyk9PT1udWxsfHxlPT09dm9pZCAwfHxlLmFic2VuY2VPZkRpZ2l0c0luTnVtZXJpY0NoYXJhY3RlclJlZmVyZW5jZSh0aGlzLmNvbnN1bWVkKSwwO2Nhc2UgWmUuRW50aXR5U3RhcnQ6cmV0dXJuIDB9fX1mdW5jdGlvbiBocChyLGUsdCxuKXtjb25zdCBzPShlJnR0LkJSQU5DSF9MRU5HVEgpPj43LGk9ZSZ0dC5KVU1QX1RBQkxFO2lmKHM9PT0wKXJldHVybiBpIT09MCYmbj09PWk/dDotMTtpZihpKXtjb25zdCBsPW4taTtyZXR1cm4gbDwwfHxsPj1zPy0xOnJbdCtsXS0xfWNvbnN0IGE9cysxPj4xO2xldCBvPTAsdT1zLTE7Zm9yKDtvPD11Oyl7Y29uc3QgbD1vK3U+Pj4xLEE9bD4+MSxnPXJbdCtBXT4+KGwmMSkqOCYyNTU7aWYoZzxuKW89bCsxO2Vsc2UgaWYoZz5uKXU9bC0xO2Vsc2UgcmV0dXJuIHJbdCthK2xdfXJldHVybi0xfXZhciBhZTsoZnVuY3Rpb24ocil7cltyLlRhYj05XT0iVGFiIixyW3IuTmV3TGluZT0xMF09Ik5ld0xpbmUiLHJbci5Gb3JtRmVlZD0xMl09IkZvcm1GZWVkIixyW3IuQ2FycmlhZ2VSZXR1cm49MTNdPSJDYXJyaWFnZVJldHVybiIscltyLlNwYWNlPTMyXT0iU3BhY2UiLHJbci5FeGNsYW1hdGlvbk1hcms9MzNdPSJFeGNsYW1hdGlvbk1hcmsiLHJbci5OdW1iZXI9MzVdPSJOdW1iZXIiLHJbci5BbXA9MzhdPSJBbXAiLHJbci5TaW5nbGVRdW90ZT0zOV09IlNpbmdsZVF1b3RlIixyW3IuRG91YmxlUXVvdGU9MzRdPSJEb3VibGVRdW90ZSIscltyLkRhc2g9NDVdPSJEYXNoIixyW3IuU2xhc2g9NDddPSJTbGFzaCIscltyLlplcm89NDhdPSJaZXJvIixyW3IuTmluZT01N109Ik5pbmUiLHJbci5TZW1pPTU5XT0iU2VtaSIscltyLkx0PTYwXT0iTHQiLHJbci5FcT02MV09IkVxIixyW3IuR3Q9NjJdPSJHdCIscltyLlF1ZXN0aW9ubWFyaz02M109IlF1ZXN0aW9ubWFyayIscltyLlVwcGVyQT02NV09IlVwcGVyQSIscltyLkxvd2VyQT05N109Ikxvd2VyQSIscltyLlVwcGVyRj03MF09IlVwcGVyRiIscltyLkxvd2VyRj0xMDJdPSJMb3dlckYiLHJbci5VcHBlclo9OTBdPSJVcHBlcloiLHJbci5Mb3dlclo9MTIyXT0iTG93ZXJaIixyW3IuTG93ZXJYPTEyMF09Ikxvd2VyWCIscltyLk9wZW5pbmdTcXVhcmVCcmFja2V0PTkxXT0iT3BlbmluZ1NxdWFyZUJyYWNrZXQifSkoYWV8fChhZT17fSkpO3ZhciBaOyhmdW5jdGlvbihyKXtyW3IuVGV4dD0xXT0iVGV4dCIscltyLkJlZm9yZVRhZ05hbWU9Ml09IkJlZm9yZVRhZ05hbWUiLHJbci5JblRhZ05hbWU9M109IkluVGFnTmFtZSIscltyLkluU2VsZkNsb3NpbmdUYWc9NF09IkluU2VsZkNsb3NpbmdUYWciLHJbci5CZWZvcmVDbG9zaW5nVGFnTmFtZT01XT0iQmVmb3JlQ2xvc2luZ1RhZ05hbWUiLHJbci5JbkNsb3NpbmdUYWdOYW1lPTZdPSJJbkNsb3NpbmdUYWdOYW1lIixyW3IuQWZ0ZXJDbG9zaW5nVGFnTmFtZT03XT0iQWZ0ZXJDbG9zaW5nVGFnTmFtZSIscltyLkJlZm9yZUF0dHJpYnV0ZU5hbWU9OF09IkJlZm9yZUF0dHJpYnV0ZU5hbWUiLHJbci5JbkF0dHJpYnV0ZU5hbWU9OV09IkluQXR0cmlidXRlTmFtZSIscltyLkFmdGVyQXR0cmlidXRlTmFtZT0xMF09IkFmdGVyQXR0cmlidXRlTmFtZSIscltyLkJlZm9yZUF0dHJpYnV0ZVZhbHVlPTExXT0iQmVmb3JlQXR0cmlidXRlVmFsdWUiLHJbci5JbkF0dHJpYnV0ZVZhbHVlRHE9MTJdPSJJbkF0dHJpYnV0ZVZhbHVlRHEiLHJbci5JbkF0dHJpYnV0ZVZhbHVlU3E9MTNdPSJJbkF0dHJpYnV0ZVZhbHVlU3EiLHJbci5JbkF0dHJpYnV0ZVZhbHVlTnE9MTRdPSJJbkF0dHJpYnV0ZVZhbHVlTnEiLHJbci5CZWZvcmVEZWNsYXJhdGlvbj0xNV09IkJlZm9yZURlY2xhcmF0aW9uIixyW3IuSW5EZWNsYXJhdGlvbj0xNl09IkluRGVjbGFyYXRpb24iLHJbci5JblByb2Nlc3NpbmdJbnN0cnVjdGlvbj0xN109IkluUHJvY2Vzc2luZ0luc3RydWN0aW9uIixyW3IuQmVmb3JlQ29tbWVudD0xOF09IkJlZm9yZUNvbW1lbnQiLHJbci5DREFUQVNlcXVlbmNlPTE5XT0iQ0RBVEFTZXF1ZW5jZSIscltyLkluU3BlY2lhbENvbW1lbnQ9MjBdPSJJblNwZWNpYWxDb21tZW50IixyW3IuSW5Db21tZW50TGlrZT0yMV09IkluQ29tbWVudExpa2UiLHJbci5CZWZvcmVTcGVjaWFsUz0yMl09IkJlZm9yZVNwZWNpYWxTIixyW3IuQmVmb3JlU3BlY2lhbFQ9MjNdPSJCZWZvcmVTcGVjaWFsVCIscltyLlNwZWNpYWxTdGFydFNlcXVlbmNlPTI0XT0iU3BlY2lhbFN0YXJ0U2VxdWVuY2UiLHJbci5JblNwZWNpYWxUYWc9MjVdPSJJblNwZWNpYWxUYWciLHJbci5JbkVudGl0eT0yNl09IkluRW50aXR5In0pKFp8fChaPXt9KSk7ZnVuY3Rpb24gV3Qocil7cmV0dXJuIHI9PT1hZS5TcGFjZXx8cj09PWFlLk5ld0xpbmV8fHI9PT1hZS5UYWJ8fHI9PT1hZS5Gb3JtRmVlZHx8cj09PWFlLkNhcnJpYWdlUmV0dXJufWZ1bmN0aW9uIGZzKHIpe3JldHVybiByPT09YWUuU2xhc2h8fHI9PT1hZS5HdHx8V3Qocil9ZnVuY3Rpb24gQXAocil7cmV0dXJuIHI+PWFlLkxvd2VyQSYmcjw9YWUuTG93ZXJafHxyPj1hZS5VcHBlckEmJnI8PWFlLlVwcGVyWn12YXIgd3Q7KGZ1bmN0aW9uKHIpe3Jbci5Ob1ZhbHVlPTBdPSJOb1ZhbHVlIixyW3IuVW5xdW90ZWQ9MV09IlVucXVvdGVkIixyW3IuU2luZ2xlPTJdPSJTaW5nbGUiLHJbci5Eb3VibGU9M109IkRvdWJsZSJ9KSh3dHx8KHd0PXt9KSk7Y29uc3QgSGU9e0NkYXRhOm5ldyBVaW50OEFycmF5KFs2Nyw2OCw2NSw4NCw2NSw5MV0pLENkYXRhRW5kOm5ldyBVaW50OEFycmF5KFs5Myw5Myw2Ml0pLENvbW1lbnRFbmQ6bmV3IFVpbnQ4QXJyYXkoWzQ1LDQ1LDYyXSksU2NyaXB0RW5kOm5ldyBVaW50OEFycmF5KFs2MCw0NywxMTUsOTksMTE0LDEwNSwxMTIsMTE2XSksU3R5bGVFbmQ6bmV3IFVpbnQ4QXJyYXkoWzYwLDQ3LDExNSwxMTYsMTIxLDEwOCwxMDFdKSxUaXRsZUVuZDpuZXcgVWludDhBcnJheShbNjAsNDcsMTE2LDEwNSwxMTYsMTA4LDEwMV0pLFRleHRhcmVhRW5kOm5ldyBVaW50OEFycmF5KFs2MCw0NywxMTYsMTAxLDEyMCwxMTYsOTcsMTE0LDEwMSw5N10pLFhtcEVuZDpuZXcgVWludDhBcnJheShbNjAsNDcsMTIwLDEwOSwxMTJdKX07Y2xhc3Mgd3V7Y29uc3RydWN0b3Ioe3htbE1vZGU6ZT0hMSxkZWNvZGVFbnRpdGllczp0PSEwfSxuKXt0aGlzLmNicz1uLHRoaXMuc3RhdGU9Wi5UZXh0LHRoaXMuYnVmZmVyPSIiLHRoaXMuc2VjdGlvblN0YXJ0PTAsdGhpcy5pbmRleD0wLHRoaXMuZW50aXR5U3RhcnQ9MCx0aGlzLmJhc2VTdGF0ZT1aLlRleHQsdGhpcy5pc1NwZWNpYWw9ITEsdGhpcy5ydW5uaW5nPSEwLHRoaXMub2Zmc2V0PTAsdGhpcy5jdXJyZW50U2VxdWVuY2U9dm9pZCAwLHRoaXMuc2VxdWVuY2VJbmRleD0wLHRoaXMueG1sTW9kZT1lLHRoaXMuZGVjb2RlRW50aXRpZXM9dCx0aGlzLmVudGl0eURlY29kZXI9bmV3IGNwKGU/YXA6aXAsKHMsaSk9PnRoaXMuZW1pdENvZGVQb2ludChzLGkpKX1yZXNldCgpe3RoaXMuc3RhdGU9Wi5UZXh0LHRoaXMuYnVmZmVyPSIiLHRoaXMuc2VjdGlvblN0YXJ0PTAsdGhpcy5pbmRleD0wLHRoaXMuYmFzZVN0YXRlPVouVGV4dCx0aGlzLmN1cnJlbnRTZXF1ZW5jZT12b2lkIDAsdGhpcy5ydW5uaW5nPSEwLHRoaXMub2Zmc2V0PTB9d3JpdGUoZSl7dGhpcy5vZmZzZXQrPXRoaXMuYnVmZmVyLmxlbmd0aCx0aGlzLmJ1ZmZlcj1lLHRoaXMucGFyc2UoKX1lbmQoKXt0aGlzLnJ1bm5pbmcmJnRoaXMuZmluaXNoKCl9cGF1c2UoKXt0aGlzLnJ1bm5pbmc9ITF9cmVzdW1lKCl7dGhpcy5ydW5uaW5nPSEwLHRoaXMuaW5kZXg8dGhpcy5idWZmZXIubGVuZ3RoK3RoaXMub2Zmc2V0JiZ0aGlzLnBhcnNlKCl9c3RhdGVUZXh0KGUpe2U9PT1hZS5MdHx8IXRoaXMuZGVjb2RlRW50aXRpZXMmJnRoaXMuZmFzdEZvcndhcmRUbyhhZS5MdCk/KHRoaXMuaW5kZXg+dGhpcy5zZWN0aW9uU3RhcnQmJnRoaXMuY2JzLm9udGV4dCh0aGlzLnNlY3Rpb25TdGFydCx0aGlzLmluZGV4KSx0aGlzLnN0YXRlPVouQmVmb3JlVGFnTmFtZSx0aGlzLnNlY3Rpb25TdGFydD10aGlzLmluZGV4KTp0aGlzLmRlY29kZUVudGl0aWVzJiZlPT09YWUuQW1wJiZ0aGlzLnN0YXJ0RW50aXR5KCl9c3RhdGVTcGVjaWFsU3RhcnRTZXF1ZW5jZShlKXtjb25zdCB0PXRoaXMuc2VxdWVuY2VJbmRleD09PXRoaXMuY3VycmVudFNlcXVlbmNlLmxlbmd0aDtpZighKHQ/ZnMoZSk6KGV8MzIpPT09dGhpcy5jdXJyZW50U2VxdWVuY2VbdGhpcy5zZXF1ZW5jZUluZGV4XSkpdGhpcy5pc1NwZWNpYWw9ITE7ZWxzZSBpZighdCl7dGhpcy5zZXF1ZW5jZUluZGV4Kys7cmV0dXJufXRoaXMuc2VxdWVuY2VJbmRleD0wLHRoaXMuc3RhdGU9Wi5JblRhZ05hbWUsdGhpcy5zdGF0ZUluVGFnTmFtZShlKX1zdGF0ZUluU3BlY2lhbFRhZyhlKXtpZih0aGlzLnNlcXVlbmNlSW5kZXg9PT10aGlzLmN1cnJlbnRTZXF1ZW5jZS5sZW5ndGgpe2lmKGU9PT1hZS5HdHx8V3QoZSkpe2NvbnN0IHQ9dGhpcy5pbmRleC10aGlzLmN1cnJlbnRTZXF1ZW5jZS5sZW5ndGg7aWYodGhpcy5zZWN0aW9uU3RhcnQ8dCl7Y29uc3Qgbj10aGlzLmluZGV4O3RoaXMuaW5kZXg9dCx0aGlzLmNicy5vbnRleHQodGhpcy5zZWN0aW9uU3RhcnQsdCksdGhpcy5pbmRleD1ufXRoaXMuaXNTcGVjaWFsPSExLHRoaXMuc2VjdGlvblN0YXJ0PXQrMix0aGlzLnN0YXRlSW5DbG9zaW5nVGFnTmFtZShlKTtyZXR1cm59dGhpcy5zZXF1ZW5jZUluZGV4PTB9KGV8MzIpPT09dGhpcy5jdXJyZW50U2VxdWVuY2VbdGhpcy5zZXF1ZW5jZUluZGV4XT90aGlzLnNlcXVlbmNlSW5kZXgrPTE6dGhpcy5zZXF1ZW5jZUluZGV4PT09MD90aGlzLmN1cnJlbnRTZXF1ZW5jZT09PUhlLlRpdGxlRW5kP3RoaXMuZGVjb2RlRW50aXRpZXMmJmU9PT1hZS5BbXAmJnRoaXMuc3RhcnRFbnRpdHkoKTp0aGlzLmZhc3RGb3J3YXJkVG8oYWUuTHQpJiYodGhpcy5zZXF1ZW5jZUluZGV4PTEpOnRoaXMuc2VxdWVuY2VJbmRleD0rKGU9PT1hZS5MdCl9c3RhdGVDREFUQVNlcXVlbmNlKGUpe2U9PT1IZS5DZGF0YVt0aGlzLnNlcXVlbmNlSW5kZXhdPysrdGhpcy5zZXF1ZW5jZUluZGV4PT09SGUuQ2RhdGEubGVuZ3RoJiYodGhpcy5zdGF0ZT1aLkluQ29tbWVudExpa2UsdGhpcy5jdXJyZW50U2VxdWVuY2U9SGUuQ2RhdGFFbmQsdGhpcy5zZXF1ZW5jZUluZGV4PTAsdGhpcy5zZWN0aW9uU3RhcnQ9dGhpcy5pbmRleCsxKToodGhpcy5zZXF1ZW5jZUluZGV4PTAsdGhpcy5zdGF0ZT1aLkluRGVjbGFyYXRpb24sdGhpcy5zdGF0ZUluRGVjbGFyYXRpb24oZSkpfWZhc3RGb3J3YXJkVG8oZSl7Zm9yKDsrK3RoaXMuaW5kZXg8dGhpcy5idWZmZXIubGVuZ3RoK3RoaXMub2Zmc2V0OylpZih0aGlzLmJ1ZmZlci5jaGFyQ29kZUF0KHRoaXMuaW5kZXgtdGhpcy5vZmZzZXQpPT09ZSlyZXR1cm4hMDtyZXR1cm4gdGhpcy5pbmRleD10aGlzLmJ1ZmZlci5sZW5ndGgrdGhpcy5vZmZzZXQtMSwhMX1zdGF0ZUluQ29tbWVudExpa2UoZSl7ZT09PXRoaXMuY3VycmVudFNlcXVlbmNlW3RoaXMuc2VxdWVuY2VJbmRleF0/Kyt0aGlzLnNlcXVlbmNlSW5kZXg9PT10aGlzLmN1cnJlbnRTZXF1ZW5jZS5sZW5ndGgmJih0aGlzLmN1cnJlbnRTZXF1ZW5jZT09PUhlLkNkYXRhRW5kP3RoaXMuY2JzLm9uY2RhdGEodGhpcy5zZWN0aW9uU3RhcnQsdGhpcy5pbmRleCwyKTp0aGlzLmNicy5vbmNvbW1lbnQodGhpcy5zZWN0aW9uU3RhcnQsdGhpcy5pbmRleCwyKSx0aGlzLnNlcXVlbmNlSW5kZXg9MCx0aGlzLnNlY3Rpb25TdGFydD10aGlzLmluZGV4KzEsdGhpcy5zdGF0ZT1aLlRleHQpOnRoaXMuc2VxdWVuY2VJbmRleD09PTA/dGhpcy5mYXN0Rm9yd2FyZFRvKHRoaXMuY3VycmVudFNlcXVlbmNlWzBdKSYmKHRoaXMuc2VxdWVuY2VJbmRleD0xKTplIT09dGhpcy5jdXJyZW50U2VxdWVuY2VbdGhpcy5zZXF1ZW5jZUluZGV4LTFdJiYodGhpcy5zZXF1ZW5jZUluZGV4PTApfWlzVGFnU3RhcnRDaGFyKGUpe3JldHVybiB0aGlzLnhtbE1vZGU/IWZzKGUpOkFwKGUpfXN0YXJ0U3BlY2lhbChlLHQpe3RoaXMuaXNTcGVjaWFsPSEwLHRoaXMuY3VycmVudFNlcXVlbmNlPWUsdGhpcy5zZXF1ZW5jZUluZGV4PXQsdGhpcy5zdGF0ZT1aLlNwZWNpYWxTdGFydFNlcXVlbmNlfXN0YXRlQmVmb3JlVGFnTmFtZShlKXtpZihlPT09YWUuRXhjbGFtYXRpb25NYXJrKXRoaXMuc3RhdGU9Wi5CZWZvcmVEZWNsYXJhdGlvbix0aGlzLnNlY3Rpb25TdGFydD10aGlzLmluZGV4KzE7ZWxzZSBpZihlPT09YWUuUXVlc3Rpb25tYXJrKXRoaXMuc3RhdGU9Wi5JblByb2Nlc3NpbmdJbnN0cnVjdGlvbix0aGlzLnNlY3Rpb25TdGFydD10aGlzLmluZGV4KzE7ZWxzZSBpZih0aGlzLmlzVGFnU3RhcnRDaGFyKGUpKXtjb25zdCB0PWV8MzI7dGhpcy5zZWN0aW9uU3RhcnQ9dGhpcy5pbmRleCx0aGlzLnhtbE1vZGU/dGhpcy5zdGF0ZT1aLkluVGFnTmFtZTp0PT09SGUuU2NyaXB0RW5kWzJdP3RoaXMuc3RhdGU9Wi5CZWZvcmVTcGVjaWFsUzp0PT09SGUuVGl0bGVFbmRbMl18fHQ9PT1IZS5YbXBFbmRbMl0/dGhpcy5zdGF0ZT1aLkJlZm9yZVNwZWNpYWxUOnRoaXMuc3RhdGU9Wi5JblRhZ05hbWV9ZWxzZSBlPT09YWUuU2xhc2g/dGhpcy5zdGF0ZT1aLkJlZm9yZUNsb3NpbmdUYWdOYW1lOih0aGlzLnN0YXRlPVouVGV4dCx0aGlzLnN0YXRlVGV4dChlKSl9c3RhdGVJblRhZ05hbWUoZSl7ZnMoZSkmJih0aGlzLmNicy5vbm9wZW50YWduYW1lKHRoaXMuc2VjdGlvblN0YXJ0LHRoaXMuaW5kZXgpLHRoaXMuc2VjdGlvblN0YXJ0PS0xLHRoaXMuc3RhdGU9Wi5CZWZvcmVBdHRyaWJ1dGVOYW1lLHRoaXMuc3RhdGVCZWZvcmVBdHRyaWJ1dGVOYW1lKGUpKX1zdGF0ZUJlZm9yZUNsb3NpbmdUYWdOYW1lKGUpe1d0KGUpfHwoZT09PWFlLkd0P3RoaXMuc3RhdGU9Wi5UZXh0Oih0aGlzLnN0YXRlPXRoaXMuaXNUYWdTdGFydENoYXIoZSk/Wi5JbkNsb3NpbmdUYWdOYW1lOlouSW5TcGVjaWFsQ29tbWVudCx0aGlzLnNlY3Rpb25TdGFydD10aGlzLmluZGV4KSl9c3RhdGVJbkNsb3NpbmdUYWdOYW1lKGUpeyhlPT09YWUuR3R8fFd0KGUpKSYmKHRoaXMuY2JzLm9uY2xvc2V0YWcodGhpcy5zZWN0aW9uU3RhcnQsdGhpcy5pbmRleCksdGhpcy5zZWN0aW9uU3RhcnQ9LTEsdGhpcy5zdGF0ZT1aLkFmdGVyQ2xvc2luZ1RhZ05hbWUsdGhpcy5zdGF0ZUFmdGVyQ2xvc2luZ1RhZ05hbWUoZSkpfXN0YXRlQWZ0ZXJDbG9zaW5nVGFnTmFtZShlKXsoZT09PWFlLkd0fHx0aGlzLmZhc3RGb3J3YXJkVG8oYWUuR3QpKSYmKHRoaXMuc3RhdGU9Wi5UZXh0LHRoaXMuc2VjdGlvblN0YXJ0PXRoaXMuaW5kZXgrMSl9c3RhdGVCZWZvcmVBdHRyaWJ1dGVOYW1lKGUpe2U9PT1hZS5HdD8odGhpcy5jYnMub25vcGVudGFnZW5kKHRoaXMuaW5kZXgpLHRoaXMuaXNTcGVjaWFsPyh0aGlzLnN0YXRlPVouSW5TcGVjaWFsVGFnLHRoaXMuc2VxdWVuY2VJbmRleD0wKTp0aGlzLnN0YXRlPVouVGV4dCx0aGlzLnNlY3Rpb25TdGFydD10aGlzLmluZGV4KzEpOmU9PT1hZS5TbGFzaD90aGlzLnN0YXRlPVouSW5TZWxmQ2xvc2luZ1RhZzpXdChlKXx8KHRoaXMuc3RhdGU9Wi5JbkF0dHJpYnV0ZU5hbWUsdGhpcy5zZWN0aW9uU3RhcnQ9dGhpcy5pbmRleCl9c3RhdGVJblNlbGZDbG9zaW5nVGFnKGUpe2U9PT1hZS5HdD8odGhpcy5jYnMub25zZWxmY2xvc2luZ3RhZyh0aGlzLmluZGV4KSx0aGlzLnN0YXRlPVouVGV4dCx0aGlzLnNlY3Rpb25TdGFydD10aGlzLmluZGV4KzEsdGhpcy5pc1NwZWNpYWw9ITEpOld0KGUpfHwodGhpcy5zdGF0ZT1aLkJlZm9yZUF0dHJpYnV0ZU5hbWUsdGhpcy5zdGF0ZUJlZm9yZUF0dHJpYnV0ZU5hbWUoZSkpfXN0YXRlSW5BdHRyaWJ1dGVOYW1lKGUpeyhlPT09YWUuRXF8fGZzKGUpKSYmKHRoaXMuY2JzLm9uYXR0cmlibmFtZSh0aGlzLnNlY3Rpb25TdGFydCx0aGlzLmluZGV4KSx0aGlzLnNlY3Rpb25TdGFydD10aGlzLmluZGV4LHRoaXMuc3RhdGU9Wi5BZnRlckF0dHJpYnV0ZU5hbWUsdGhpcy5zdGF0ZUFmdGVyQXR0cmlidXRlTmFtZShlKSl9c3RhdGVBZnRlckF0dHJpYnV0ZU5hbWUoZSl7ZT09PWFlLkVxP3RoaXMuc3RhdGU9Wi5CZWZvcmVBdHRyaWJ1dGVWYWx1ZTplPT09YWUuU2xhc2h8fGU9PT1hZS5HdD8odGhpcy5jYnMub25hdHRyaWJlbmQod3QuTm9WYWx1ZSx0aGlzLnNlY3Rpb25TdGFydCksdGhpcy5zZWN0aW9uU3RhcnQ9LTEsdGhpcy5zdGF0ZT1aLkJlZm9yZUF0dHJpYnV0ZU5hbWUsdGhpcy5zdGF0ZUJlZm9yZUF0dHJpYnV0ZU5hbWUoZSkpOld0KGUpfHwodGhpcy5jYnMub25hdHRyaWJlbmQod3QuTm9WYWx1ZSx0aGlzLnNlY3Rpb25TdGFydCksdGhpcy5zdGF0ZT1aLkluQXR0cmlidXRlTmFtZSx0aGlzLnNlY3Rpb25TdGFydD10aGlzLmluZGV4KX1zdGF0ZUJlZm9yZUF0dHJpYnV0ZVZhbHVlKGUpe2U9PT1hZS5Eb3VibGVRdW90ZT8odGhpcy5zdGF0ZT1aLkluQXR0cmlidXRlVmFsdWVEcSx0aGlzLnNlY3Rpb25TdGFydD10aGlzLmluZGV4KzEpOmU9PT1hZS5TaW5nbGVRdW90ZT8odGhpcy5zdGF0ZT1aLkluQXR0cmlidXRlVmFsdWVTcSx0aGlzLnNlY3Rpb25TdGFydD10aGlzLmluZGV4KzEpOld0KGUpfHwodGhpcy5zZWN0aW9uU3RhcnQ9dGhpcy5pbmRleCx0aGlzLnN0YXRlPVouSW5BdHRyaWJ1dGVWYWx1ZU5xLHRoaXMuc3RhdGVJbkF0dHJpYnV0ZVZhbHVlTm9RdW90ZXMoZSkpfWhhbmRsZUluQXR0cmlidXRlVmFsdWUoZSx0KXtlPT09dHx8IXRoaXMuZGVjb2RlRW50aXRpZXMmJnRoaXMuZmFzdEZvcndhcmRUbyh0KT8odGhpcy5jYnMub25hdHRyaWJkYXRhKHRoaXMuc2VjdGlvblN0YXJ0LHRoaXMuaW5kZXgpLHRoaXMuc2VjdGlvblN0YXJ0PS0xLHRoaXMuY2JzLm9uYXR0cmliZW5kKHQ9PT1hZS5Eb3VibGVRdW90ZT93dC5Eb3VibGU6d3QuU2luZ2xlLHRoaXMuaW5kZXgrMSksdGhpcy5zdGF0ZT1aLkJlZm9yZUF0dHJpYnV0ZU5hbWUpOnRoaXMuZGVjb2RlRW50aXRpZXMmJmU9PT1hZS5BbXAmJnRoaXMuc3RhcnRFbnRpdHkoKX1zdGF0ZUluQXR0cmlidXRlVmFsdWVEb3VibGVRdW90ZXMoZSl7dGhpcy5oYW5kbGVJbkF0dHJpYnV0ZVZhbHVlKGUsYWUuRG91YmxlUXVvdGUpfXN0YXRlSW5BdHRyaWJ1dGVWYWx1ZVNpbmdsZVF1b3RlcyhlKXt0aGlzLmhhbmRsZUluQXR0cmlidXRlVmFsdWUoZSxhZS5TaW5nbGVRdW90ZSl9c3RhdGVJbkF0dHJpYnV0ZVZhbHVlTm9RdW90ZXMoZSl7V3QoZSl8fGU9PT1hZS5HdD8odGhpcy5jYnMub25hdHRyaWJkYXRhKHRoaXMuc2VjdGlvblN0YXJ0LHRoaXMuaW5kZXgpLHRoaXMuc2VjdGlvblN0YXJ0PS0xLHRoaXMuY2JzLm9uYXR0cmliZW5kKHd0LlVucXVvdGVkLHRoaXMuaW5kZXgpLHRoaXMuc3RhdGU9Wi5CZWZvcmVBdHRyaWJ1dGVOYW1lLHRoaXMuc3RhdGVCZWZvcmVBdHRyaWJ1dGVOYW1lKGUpKTp0aGlzLmRlY29kZUVudGl0aWVzJiZlPT09YWUuQW1wJiZ0aGlzLnN0YXJ0RW50aXR5KCl9c3RhdGVCZWZvcmVEZWNsYXJhdGlvbihlKXtlPT09YWUuT3BlbmluZ1NxdWFyZUJyYWNrZXQ/KHRoaXMuc3RhdGU9Wi5DREFUQVNlcXVlbmNlLHRoaXMuc2VxdWVuY2VJbmRleD0wKTp0aGlzLnN0YXRlPWU9PT1hZS5EYXNoP1ouQmVmb3JlQ29tbWVudDpaLkluRGVjbGFyYXRpb259c3RhdGVJbkRlY2xhcmF0aW9uKGUpeyhlPT09YWUuR3R8fHRoaXMuZmFzdEZvcndhcmRUbyhhZS5HdCkpJiYodGhpcy5jYnMub25kZWNsYXJhdGlvbih0aGlzLnNlY3Rpb25TdGFydCx0aGlzLmluZGV4KSx0aGlzLnN0YXRlPVouVGV4dCx0aGlzLnNlY3Rpb25TdGFydD10aGlzLmluZGV4KzEpfXN0YXRlSW5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oZSl7KGU9PT1hZS5HdHx8dGhpcy5mYXN0Rm9yd2FyZFRvKGFlLkd0KSkmJih0aGlzLmNicy5vbnByb2Nlc3NpbmdpbnN0cnVjdGlvbih0aGlzLnNlY3Rpb25TdGFydCx0aGlzLmluZGV4KSx0aGlzLnN0YXRlPVouVGV4dCx0aGlzLnNlY3Rpb25TdGFydD10aGlzLmluZGV4KzEpfXN0YXRlQmVmb3JlQ29tbWVudChlKXtlPT09YWUuRGFzaD8odGhpcy5zdGF0ZT1aLkluQ29tbWVudExpa2UsdGhpcy5jdXJyZW50U2VxdWVuY2U9SGUuQ29tbWVudEVuZCx0aGlzLnNlcXVlbmNlSW5kZXg9Mix0aGlzLnNlY3Rpb25TdGFydD10aGlzLmluZGV4KzEpOnRoaXMuc3RhdGU9Wi5JbkRlY2xhcmF0aW9ufXN0YXRlSW5TcGVjaWFsQ29tbWVudChlKXsoZT09PWFlLkd0fHx0aGlzLmZhc3RGb3J3YXJkVG8oYWUuR3QpKSYmKHRoaXMuY2JzLm9uY29tbWVudCh0aGlzLnNlY3Rpb25TdGFydCx0aGlzLmluZGV4LDApLHRoaXMuc3RhdGU9Wi5UZXh0LHRoaXMuc2VjdGlvblN0YXJ0PXRoaXMuaW5kZXgrMSl9c3RhdGVCZWZvcmVTcGVjaWFsUyhlKXtjb25zdCB0PWV8MzI7dD09PUhlLlNjcmlwdEVuZFszXT90aGlzLnN0YXJ0U3BlY2lhbChIZS5TY3JpcHRFbmQsNCk6dD09PUhlLlN0eWxlRW5kWzNdP3RoaXMuc3RhcnRTcGVjaWFsKEhlLlN0eWxlRW5kLDQpOih0aGlzLnN0YXRlPVouSW5UYWdOYW1lLHRoaXMuc3RhdGVJblRhZ05hbWUoZSkpfXN0YXRlQmVmb3JlU3BlY2lhbFQoZSl7c3dpdGNoKGV8MzIpe2Nhc2UgSGUuVGl0bGVFbmRbM106e3RoaXMuc3RhcnRTcGVjaWFsKEhlLlRpdGxlRW5kLDQpO2JyZWFrfWNhc2UgSGUuVGV4dGFyZWFFbmRbM106e3RoaXMuc3RhcnRTcGVjaWFsKEhlLlRleHRhcmVhRW5kLDQpO2JyZWFrfWNhc2UgSGUuWG1wRW5kWzNdOnt0aGlzLnN0YXJ0U3BlY2lhbChIZS5YbXBFbmQsNCk7YnJlYWt9ZGVmYXVsdDp0aGlzLnN0YXRlPVouSW5UYWdOYW1lLHRoaXMuc3RhdGVJblRhZ05hbWUoZSl9fXN0YXJ0RW50aXR5KCl7dGhpcy5iYXNlU3RhdGU9dGhpcy5zdGF0ZSx0aGlzLnN0YXRlPVouSW5FbnRpdHksdGhpcy5lbnRpdHlTdGFydD10aGlzLmluZGV4LHRoaXMuZW50aXR5RGVjb2Rlci5zdGFydEVudGl0eSh0aGlzLnhtbE1vZGU/X3QuU3RyaWN0OnRoaXMuYmFzZVN0YXRlPT09Wi5UZXh0fHx0aGlzLmJhc2VTdGF0ZT09PVouSW5TcGVjaWFsVGFnP190LkxlZ2FjeTpfdC5BdHRyaWJ1dGUpfXN0YXRlSW5FbnRpdHkoKXtjb25zdCBlPXRoaXMuaW5kZXgtdGhpcy5vZmZzZXQsdD10aGlzLmVudGl0eURlY29kZXIud3JpdGUodGhpcy5idWZmZXIsZSk7aWYodD49MCl0aGlzLnN0YXRlPXRoaXMuYmFzZVN0YXRlLHQ9PT0wJiYodGhpcy5pbmRleC09MSk7ZWxzZXtpZihlPHRoaXMuYnVmZmVyLmxlbmd0aCYmdGhpcy5idWZmZXIuY2hhckNvZGVBdChlKT09PWFlLkFtcCl7dGhpcy5zdGF0ZT10aGlzLmJhc2VTdGF0ZSx0aGlzLmluZGV4LT0xO3JldHVybn10aGlzLmluZGV4PXRoaXMub2Zmc2V0K3RoaXMuYnVmZmVyLmxlbmd0aC0xfX1jbGVhbnVwKCl7dGhpcy5ydW5uaW5nJiZ0aGlzLnNlY3Rpb25TdGFydCE9PXRoaXMuaW5kZXgmJih0aGlzLnN0YXRlPT09Wi5UZXh0fHx0aGlzLnN0YXRlPT09Wi5JblNwZWNpYWxUYWcmJnRoaXMuc2VxdWVuY2VJbmRleD09PTA/KHRoaXMuY2JzLm9udGV4dCh0aGlzLnNlY3Rpb25TdGFydCx0aGlzLmluZGV4KSx0aGlzLnNlY3Rpb25TdGFydD10aGlzLmluZGV4KToodGhpcy5zdGF0ZT09PVouSW5BdHRyaWJ1dGVWYWx1ZURxfHx0aGlzLnN0YXRlPT09Wi5JbkF0dHJpYnV0ZVZhbHVlU3F8fHRoaXMuc3RhdGU9PT1aLkluQXR0cmlidXRlVmFsdWVOcSkmJih0aGlzLmNicy5vbmF0dHJpYmRhdGEodGhpcy5zZWN0aW9uU3RhcnQsdGhpcy5pbmRleCksdGhpcy5zZWN0aW9uU3RhcnQ9dGhpcy5pbmRleCkpfXNob3VsZENvbnRpbnVlKCl7cmV0dXJuIHRoaXMuaW5kZXg8dGhpcy5idWZmZXIubGVuZ3RoK3RoaXMub2Zmc2V0JiZ0aGlzLnJ1bm5pbmd9cGFyc2UoKXtmb3IoO3RoaXMuc2hvdWxkQ29udGludWUoKTspe2NvbnN0IGU9dGhpcy5idWZmZXIuY2hhckNvZGVBdCh0aGlzLmluZGV4LXRoaXMub2Zmc2V0KTtzd2l0Y2godGhpcy5zdGF0ZSl7Y2FzZSBaLlRleHQ6e3RoaXMuc3RhdGVUZXh0KGUpO2JyZWFrfWNhc2UgWi5TcGVjaWFsU3RhcnRTZXF1ZW5jZTp7dGhpcy5zdGF0ZVNwZWNpYWxTdGFydFNlcXVlbmNlKGUpO2JyZWFrfWNhc2UgWi5JblNwZWNpYWxUYWc6e3RoaXMuc3RhdGVJblNwZWNpYWxUYWcoZSk7YnJlYWt9Y2FzZSBaLkNEQVRBU2VxdWVuY2U6e3RoaXMuc3RhdGVDREFUQVNlcXVlbmNlKGUpO2JyZWFrfWNhc2UgWi5JbkF0dHJpYnV0ZVZhbHVlRHE6e3RoaXMuc3RhdGVJbkF0dHJpYnV0ZVZhbHVlRG91YmxlUXVvdGVzKGUpO2JyZWFrfWNhc2UgWi5JbkF0dHJpYnV0ZU5hbWU6e3RoaXMuc3RhdGVJbkF0dHJpYnV0ZU5hbWUoZSk7YnJlYWt9Y2FzZSBaLkluQ29tbWVudExpa2U6e3RoaXMuc3RhdGVJbkNvbW1lbnRMaWtlKGUpO2JyZWFrfWNhc2UgWi5JblNwZWNpYWxDb21tZW50Ont0aGlzLnN0YXRlSW5TcGVjaWFsQ29tbWVudChlKTticmVha31jYXNlIFouQmVmb3JlQXR0cmlidXRlTmFtZTp7dGhpcy5zdGF0ZUJlZm9yZUF0dHJpYnV0ZU5hbWUoZSk7YnJlYWt9Y2FzZSBaLkluVGFnTmFtZTp7dGhpcy5zdGF0ZUluVGFnTmFtZShlKTticmVha31jYXNlIFouSW5DbG9zaW5nVGFnTmFtZTp7dGhpcy5zdGF0ZUluQ2xvc2luZ1RhZ05hbWUoZSk7YnJlYWt9Y2FzZSBaLkJlZm9yZVRhZ05hbWU6e3RoaXMuc3RhdGVCZWZvcmVUYWdOYW1lKGUpO2JyZWFrfWNhc2UgWi5BZnRlckF0dHJpYnV0ZU5hbWU6e3RoaXMuc3RhdGVBZnRlckF0dHJpYnV0ZU5hbWUoZSk7YnJlYWt9Y2FzZSBaLkluQXR0cmlidXRlVmFsdWVTcTp7dGhpcy5zdGF0ZUluQXR0cmlidXRlVmFsdWVTaW5nbGVRdW90ZXMoZSk7YnJlYWt9Y2FzZSBaLkJlZm9yZUF0dHJpYnV0ZVZhbHVlOnt0aGlzLnN0YXRlQmVmb3JlQXR0cmlidXRlVmFsdWUoZSk7YnJlYWt9Y2FzZSBaLkJlZm9yZUNsb3NpbmdUYWdOYW1lOnt0aGlzLnN0YXRlQmVmb3JlQ2xvc2luZ1RhZ05hbWUoZSk7YnJlYWt9Y2FzZSBaLkFmdGVyQ2xvc2luZ1RhZ05hbWU6e3RoaXMuc3RhdGVBZnRlckNsb3NpbmdUYWdOYW1lKGUpO2JyZWFrfWNhc2UgWi5CZWZvcmVTcGVjaWFsUzp7dGhpcy5zdGF0ZUJlZm9yZVNwZWNpYWxTKGUpO2JyZWFrfWNhc2UgWi5CZWZvcmVTcGVjaWFsVDp7dGhpcy5zdGF0ZUJlZm9yZVNwZWNpYWxUKGUpO2JyZWFrfWNhc2UgWi5JbkF0dHJpYnV0ZVZhbHVlTnE6e3RoaXMuc3RhdGVJbkF0dHJpYnV0ZVZhbHVlTm9RdW90ZXMoZSk7YnJlYWt9Y2FzZSBaLkluU2VsZkNsb3NpbmdUYWc6e3RoaXMuc3RhdGVJblNlbGZDbG9zaW5nVGFnKGUpO2JyZWFrfWNhc2UgWi5JbkRlY2xhcmF0aW9uOnt0aGlzLnN0YXRlSW5EZWNsYXJhdGlvbihlKTticmVha31jYXNlIFouQmVmb3JlRGVjbGFyYXRpb246e3RoaXMuc3RhdGVCZWZvcmVEZWNsYXJhdGlvbihlKTticmVha31jYXNlIFouQmVmb3JlQ29tbWVudDp7dGhpcy5zdGF0ZUJlZm9yZUNvbW1lbnQoZSk7YnJlYWt9Y2FzZSBaLkluUHJvY2Vzc2luZ0luc3RydWN0aW9uOnt0aGlzLnN0YXRlSW5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oZSk7YnJlYWt9Y2FzZSBaLkluRW50aXR5Ont0aGlzLnN0YXRlSW5FbnRpdHkoKTticmVha319dGhpcy5pbmRleCsrfXRoaXMuY2xlYW51cCgpfWZpbmlzaCgpe3RoaXMuc3RhdGU9PT1aLkluRW50aXR5JiYodGhpcy5lbnRpdHlEZWNvZGVyLmVuZCgpLHRoaXMuc3RhdGU9dGhpcy5iYXNlU3RhdGUpLHRoaXMuaGFuZGxlVHJhaWxpbmdEYXRhKCksdGhpcy5jYnMub25lbmQoKX1oYW5kbGVUcmFpbGluZ0RhdGEoKXtjb25zdCBlPXRoaXMuYnVmZmVyLmxlbmd0aCt0aGlzLm9mZnNldDt0aGlzLnNlY3Rpb25TdGFydD49ZXx8KHRoaXMuc3RhdGU9PT1aLkluQ29tbWVudExpa2U/dGhpcy5jdXJyZW50U2VxdWVuY2U9PT1IZS5DZGF0YUVuZD90aGlzLmNicy5vbmNkYXRhKHRoaXMuc2VjdGlvblN0YXJ0LGUsMCk6dGhpcy5jYnMub25jb21tZW50KHRoaXMuc2VjdGlvblN0YXJ0LGUsMCk6dGhpcy5zdGF0ZT09PVouSW5UYWdOYW1lfHx0aGlzLnN0YXRlPT09Wi5CZWZvcmVBdHRyaWJ1dGVOYW1lfHx0aGlzLnN0YXRlPT09Wi5CZWZvcmVBdHRyaWJ1dGVWYWx1ZXx8dGhpcy5zdGF0ZT09PVouQWZ0ZXJBdHRyaWJ1dGVOYW1lfHx0aGlzLnN0YXRlPT09Wi5JbkF0dHJpYnV0ZU5hbWV8fHRoaXMuc3RhdGU9PT1aLkluQXR0cmlidXRlVmFsdWVTcXx8dGhpcy5zdGF0ZT09PVouSW5BdHRyaWJ1dGVWYWx1ZURxfHx0aGlzLnN0YXRlPT09Wi5JbkF0dHJpYnV0ZVZhbHVlTnF8fHRoaXMuc3RhdGU9PT1aLkluQ2xvc2luZ1RhZ05hbWV8fHRoaXMuY2JzLm9udGV4dCh0aGlzLnNlY3Rpb25TdGFydCxlKSl9ZW1pdENvZGVQb2ludChlLHQpe3RoaXMuYmFzZVN0YXRlIT09Wi5UZXh0JiZ0aGlzLmJhc2VTdGF0ZSE9PVouSW5TcGVjaWFsVGFnPyh0aGlzLnNlY3Rpb25TdGFydDx0aGlzLmVudGl0eVN0YXJ0JiZ0aGlzLmNicy5vbmF0dHJpYmRhdGEodGhpcy5zZWN0aW9uU3RhcnQsdGhpcy5lbnRpdHlTdGFydCksdGhpcy5zZWN0aW9uU3RhcnQ9dGhpcy5lbnRpdHlTdGFydCt0LHRoaXMuaW5kZXg9dGhpcy5zZWN0aW9uU3RhcnQtMSx0aGlzLmNicy5vbmF0dHJpYmVudGl0eShlKSk6KHRoaXMuc2VjdGlvblN0YXJ0PHRoaXMuZW50aXR5U3RhcnQmJnRoaXMuY2JzLm9udGV4dCh0aGlzLnNlY3Rpb25TdGFydCx0aGlzLmVudGl0eVN0YXJ0KSx0aGlzLnNlY3Rpb25TdGFydD10aGlzLmVudGl0eVN0YXJ0K3QsdGhpcy5pbmRleD10aGlzLnNlY3Rpb25TdGFydC0xLHRoaXMuY2JzLm9udGV4dGVudGl0eShlLHRoaXMuc2VjdGlvblN0YXJ0KSl9fWNvbnN0IEpyPW5ldyBTZXQoWyJpbnB1dCIsIm9wdGlvbiIsIm9wdGdyb3VwIiwic2VsZWN0IiwiYnV0dG9uIiwiZGF0YWxpc3QiLCJ0ZXh0YXJlYSJdKSxJZT1uZXcgU2V0KFsicCJdKSxEdT1uZXcgU2V0KFsidGhlYWQiLCJ0Ym9keSJdKSxJdT1uZXcgU2V0KFsiZGQiLCJkdCJdKSxOdT1uZXcgU2V0KFsicnQiLCJycCJdKSxkcD1uZXcgTWFwKFtbInRyIixuZXcgU2V0KFsidHIiLCJ0aCIsInRkIl0pXSxbInRoIixuZXcgU2V0KFsidGgiXSldLFsidGQiLG5ldyBTZXQoWyJ0aGVhZCIsInRoIiwidGQiXSldLFsiYm9keSIsbmV3IFNldChbImhlYWQiLCJsaW5rIiwic2NyaXB0Il0pXSxbImxpIixuZXcgU2V0KFsibGkiXSldLFsicCIsSWVdLFsiaDEiLEllXSxbImgyIixJZV0sWyJoMyIsSWVdLFsiaDQiLEllXSxbImg1IixJZV0sWyJoNiIsSWVdLFsic2VsZWN0IixKcl0sWyJpbnB1dCIsSnJdLFsib3V0cHV0IixKcl0sWyJidXR0b24iLEpyXSxbImRhdGFsaXN0IixKcl0sWyJ0ZXh0YXJlYSIsSnJdLFsib3B0aW9uIixuZXcgU2V0KFsib3B0aW9uIl0pXSxbIm9wdGdyb3VwIixuZXcgU2V0KFsib3B0Z3JvdXAiLCJvcHRpb24iXSldLFsiZGQiLEl1XSxbImR0IixJdV0sWyJhZGRyZXNzIixJZV0sWyJhcnRpY2xlIixJZV0sWyJhc2lkZSIsSWVdLFsiYmxvY2txdW90ZSIsSWVdLFsiZGV0YWlscyIsSWVdLFsiZGl2IixJZV0sWyJkbCIsSWVdLFsiZmllbGRzZXQiLEllXSxbImZpZ2NhcHRpb24iLEllXSxbImZpZ3VyZSIsSWVdLFsiZm9vdGVyIixJZV0sWyJmb3JtIixJZV0sWyJoZWFkZXIiLEllXSxbImhyIixJZV0sWyJtYWluIixJZV0sWyJuYXYiLEllXSxbIm9sIixJZV0sWyJwcmUiLEllXSxbInNlY3Rpb24iLEllXSxbInRhYmxlIixJZV0sWyJ1bCIsSWVdLFsicnQiLE51XSxbInJwIixOdV0sWyJ0Ym9keSIsRHVdLFsidGZvb3QiLER1XV0pLGZwPW5ldyBTZXQoWyJhcmVhIiwiYmFzZSIsImJhc2Vmb250IiwiYnIiLCJjb2wiLCJjb21tYW5kIiwiZW1iZWQiLCJmcmFtZSIsImhyIiwiaW1nIiwiaW5wdXQiLCJpc2luZGV4Iiwia2V5Z2VuIiwibGluayIsIm1ldGEiLCJwYXJhbSIsInNvdXJjZSIsInRyYWNrIiwid2JyIl0pLGt1PW5ldyBTZXQoWyJtYXRoIiwic3ZnIl0pLHh1PW5ldyBTZXQoWyJtaSIsIm1vIiwibW4iLCJtcyIsIm10ZXh0IiwiYW5ub3RhdGlvbi14bWwiLCJmb3JlaWdub2JqZWN0IiwiZGVzYyIsInRpdGxlIl0pLHBwPS9cc3xcLy87bGV0IHBzPWNsYXNze2NvbnN0cnVjdG9yKGUsdD17fSl7dmFyIG4scyxpLGEsbyx1O3RoaXMub3B0aW9ucz10LHRoaXMuc3RhcnRJbmRleD0wLHRoaXMuZW5kSW5kZXg9MCx0aGlzLm9wZW5UYWdTdGFydD0wLHRoaXMudGFnbmFtZT0iIix0aGlzLmF0dHJpYm5hbWU9IiIsdGhpcy5hdHRyaWJ2YWx1ZT0iIix0aGlzLmF0dHJpYnM9bnVsbCx0aGlzLnN0YWNrPVtdLHRoaXMuYnVmZmVycz1bXSx0aGlzLmJ1ZmZlck9mZnNldD0wLHRoaXMud3JpdGVJbmRleD0wLHRoaXMuZW5kZWQ9ITEsdGhpcy5jYnM9ZT8/e30sdGhpcy5odG1sTW9kZT0hdGhpcy5vcHRpb25zLnhtbE1vZGUsdGhpcy5sb3dlckNhc2VUYWdOYW1lcz0obj10Lmxvd2VyQ2FzZVRhZ3MpIT09bnVsbCYmbiE9PXZvaWQgMD9uOnRoaXMuaHRtbE1vZGUsdGhpcy5sb3dlckNhc2VBdHRyaWJ1dGVOYW1lcz0ocz10Lmxvd2VyQ2FzZUF0dHJpYnV0ZU5hbWVzKSE9PW51bGwmJnMhPT12b2lkIDA/czp0aGlzLmh0bWxNb2RlLHRoaXMucmVjb2duaXplU2VsZkNsb3Npbmc9KGk9dC5yZWNvZ25pemVTZWxmQ2xvc2luZykhPT1udWxsJiZpIT09dm9pZCAwP2k6IXRoaXMuaHRtbE1vZGUsdGhpcy50b2tlbml6ZXI9bmV3KChhPXQuVG9rZW5pemVyKSE9PW51bGwmJmEhPT12b2lkIDA/YTp3dSkodGhpcy5vcHRpb25zLHRoaXMpLHRoaXMuZm9yZWlnbkNvbnRleHQ9WyF0aGlzLmh0bWxNb2RlXSwodT0obz10aGlzLmNicykub25wYXJzZXJpbml0KT09PW51bGx8fHU9PT12b2lkIDB8fHUuY2FsbChvLHRoaXMpfW9udGV4dChlLHQpe3ZhciBuLHM7Y29uc3QgaT10aGlzLmdldFNsaWNlKGUsdCk7dGhpcy5lbmRJbmRleD10LTEsKHM9KG49dGhpcy5jYnMpLm9udGV4dCk9PT1udWxsfHxzPT09dm9pZCAwfHxzLmNhbGwobixpKSx0aGlzLnN0YXJ0SW5kZXg9dH1vbnRleHRlbnRpdHkoZSx0KXt2YXIgbixzO3RoaXMuZW5kSW5kZXg9dC0xLChzPShuPXRoaXMuY2JzKS5vbnRleHQpPT09bnVsbHx8cz09PXZvaWQgMHx8cy5jYWxsKG4sRXUoZSkpLHRoaXMuc3RhcnRJbmRleD10fWlzVm9pZEVsZW1lbnQoZSl7cmV0dXJuIHRoaXMuaHRtbE1vZGUmJmZwLmhhcyhlKX1vbm9wZW50YWduYW1lKGUsdCl7dGhpcy5lbmRJbmRleD10O2xldCBuPXRoaXMuZ2V0U2xpY2UoZSx0KTt0aGlzLmxvd2VyQ2FzZVRhZ05hbWVzJiYobj1uLnRvTG93ZXJDYXNlKCkpLHRoaXMuZW1pdE9wZW5UYWcobil9ZW1pdE9wZW5UYWcoZSl7dmFyIHQsbixzLGk7dGhpcy5vcGVuVGFnU3RhcnQ9dGhpcy5zdGFydEluZGV4LHRoaXMudGFnbmFtZT1lO2NvbnN0IGE9dGhpcy5odG1sTW9kZSYmZHAuZ2V0KGUpO2lmKGEpZm9yKDt0aGlzLnN0YWNrLmxlbmd0aD4wJiZhLmhhcyh0aGlzLnN0YWNrWzBdKTspe2NvbnN0IG89dGhpcy5zdGFjay5zaGlmdCgpOyhuPSh0PXRoaXMuY2JzKS5vbmNsb3NldGFnKT09PW51bGx8fG49PT12b2lkIDB8fG4uY2FsbCh0LG8sITApfXRoaXMuaXNWb2lkRWxlbWVudChlKXx8KHRoaXMuc3RhY2sudW5zaGlmdChlKSx0aGlzLmh0bWxNb2RlJiYoa3UuaGFzKGUpP3RoaXMuZm9yZWlnbkNvbnRleHQudW5zaGlmdCghMCk6eHUuaGFzKGUpJiZ0aGlzLmZvcmVpZ25Db250ZXh0LnVuc2hpZnQoITEpKSksKGk9KHM9dGhpcy5jYnMpLm9ub3BlbnRhZ25hbWUpPT09bnVsbHx8aT09PXZvaWQgMHx8aS5jYWxsKHMsZSksdGhpcy5jYnMub25vcGVudGFnJiYodGhpcy5hdHRyaWJzPXt9KX1lbmRPcGVuVGFnKGUpe3ZhciB0LG47dGhpcy5zdGFydEluZGV4PXRoaXMub3BlblRhZ1N0YXJ0LHRoaXMuYXR0cmlicyYmKChuPSh0PXRoaXMuY2JzKS5vbm9wZW50YWcpPT09bnVsbHx8bj09PXZvaWQgMHx8bi5jYWxsKHQsdGhpcy50YWduYW1lLHRoaXMuYXR0cmlicyxlKSx0aGlzLmF0dHJpYnM9bnVsbCksdGhpcy5jYnMub25jbG9zZXRhZyYmdGhpcy5pc1ZvaWRFbGVtZW50KHRoaXMudGFnbmFtZSkmJnRoaXMuY2JzLm9uY2xvc2V0YWcodGhpcy50YWduYW1lLCEwKSx0aGlzLnRhZ25hbWU9IiJ9b25vcGVudGFnZW5kKGUpe3RoaXMuZW5kSW5kZXg9ZSx0aGlzLmVuZE9wZW5UYWcoITEpLHRoaXMuc3RhcnRJbmRleD1lKzF9b25jbG9zZXRhZyhlLHQpe3ZhciBuLHMsaSxhLG8sdSxsLEE7dGhpcy5lbmRJbmRleD10O2xldCBkPXRoaXMuZ2V0U2xpY2UoZSx0KTtpZih0aGlzLmxvd2VyQ2FzZVRhZ05hbWVzJiYoZD1kLnRvTG93ZXJDYXNlKCkpLHRoaXMuaHRtbE1vZGUmJihrdS5oYXMoZCl8fHh1LmhhcyhkKSkmJnRoaXMuZm9yZWlnbkNvbnRleHQuc2hpZnQoKSx0aGlzLmlzVm9pZEVsZW1lbnQoZCkpdGhpcy5odG1sTW9kZSYmZD09PSJiciImJigoYT0oaT10aGlzLmNicykub25vcGVudGFnbmFtZSk9PT1udWxsfHxhPT09dm9pZCAwfHxhLmNhbGwoaSwiYnIiKSwodT0obz10aGlzLmNicykub25vcGVudGFnKT09PW51bGx8fHU9PT12b2lkIDB8fHUuY2FsbChvLCJiciIse30sITApLChBPShsPXRoaXMuY2JzKS5vbmNsb3NldGFnKT09PW51bGx8fEE9PT12b2lkIDB8fEEuY2FsbChsLCJiciIsITEpKTtlbHNle2NvbnN0IGc9dGhpcy5zdGFjay5pbmRleE9mKGQpO2lmKGchPT0tMSlmb3IobGV0IGY9MDtmPD1nO2YrKyl7Y29uc3QgQz10aGlzLnN0YWNrLnNoaWZ0KCk7KHM9KG49dGhpcy5jYnMpLm9uY2xvc2V0YWcpPT09bnVsbHx8cz09PXZvaWQgMHx8cy5jYWxsKG4sQyxmIT09Zyl9ZWxzZSB0aGlzLmh0bWxNb2RlJiZkPT09InAiJiYodGhpcy5lbWl0T3BlblRhZygicCIpLHRoaXMuY2xvc2VDdXJyZW50VGFnKCEwKSl9dGhpcy5zdGFydEluZGV4PXQrMX1vbnNlbGZjbG9zaW5ndGFnKGUpe3RoaXMuZW5kSW5kZXg9ZSx0aGlzLnJlY29nbml6ZVNlbGZDbG9zaW5nfHx0aGlzLmZvcmVpZ25Db250ZXh0WzBdPyh0aGlzLmNsb3NlQ3VycmVudFRhZyghMSksdGhpcy5zdGFydEluZGV4PWUrMSk6dGhpcy5vbm9wZW50YWdlbmQoZSl9Y2xvc2VDdXJyZW50VGFnKGUpe3ZhciB0LG47Y29uc3Qgcz10aGlzLnRhZ25hbWU7dGhpcy5lbmRPcGVuVGFnKGUpLHRoaXMuc3RhY2tbMF09PT1zJiYoKG49KHQ9dGhpcy5jYnMpLm9uY2xvc2V0YWcpPT09bnVsbHx8bj09PXZvaWQgMHx8bi5jYWxsKHQscywhZSksdGhpcy5zdGFjay5zaGlmdCgpKX1vbmF0dHJpYm5hbWUoZSx0KXt0aGlzLnN0YXJ0SW5kZXg9ZTtjb25zdCBuPXRoaXMuZ2V0U2xpY2UoZSx0KTt0aGlzLmF0dHJpYm5hbWU9dGhpcy5sb3dlckNhc2VBdHRyaWJ1dGVOYW1lcz9uLnRvTG93ZXJDYXNlKCk6bn1vbmF0dHJpYmRhdGEoZSx0KXt0aGlzLmF0dHJpYnZhbHVlKz10aGlzLmdldFNsaWNlKGUsdCl9b25hdHRyaWJlbnRpdHkoZSl7dGhpcy5hdHRyaWJ2YWx1ZSs9RXUoZSl9b25hdHRyaWJlbmQoZSx0KXt2YXIgbixzO3RoaXMuZW5kSW5kZXg9dCwocz0obj10aGlzLmNicykub25hdHRyaWJ1dGUpPT09bnVsbHx8cz09PXZvaWQgMHx8cy5jYWxsKG4sdGhpcy5hdHRyaWJuYW1lLHRoaXMuYXR0cmlidmFsdWUsZT09PXd0LkRvdWJsZT8nIic6ZT09PXd0LlNpbmdsZT8iJyI6ZT09PXd0Lk5vVmFsdWU/dm9pZCAwOm51bGwpLHRoaXMuYXR0cmlicyYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmF0dHJpYnMsdGhpcy5hdHRyaWJuYW1lKSYmKHRoaXMuYXR0cmlic1t0aGlzLmF0dHJpYm5hbWVdPXRoaXMuYXR0cmlidmFsdWUpLHRoaXMuYXR0cmlidmFsdWU9IiJ9Z2V0SW5zdHJ1Y3Rpb25OYW1lKGUpe2NvbnN0IHQ9ZS5zZWFyY2gocHApO2xldCBuPXQ8MD9lOmUuc3Vic3RyKDAsdCk7cmV0dXJuIHRoaXMubG93ZXJDYXNlVGFnTmFtZXMmJihuPW4udG9Mb3dlckNhc2UoKSksbn1vbmRlY2xhcmF0aW9uKGUsdCl7dGhpcy5lbmRJbmRleD10O2NvbnN0IG49dGhpcy5nZXRTbGljZShlLHQpO2lmKHRoaXMuY2JzLm9ucHJvY2Vzc2luZ2luc3RydWN0aW9uKXtjb25zdCBzPXRoaXMuZ2V0SW5zdHJ1Y3Rpb25OYW1lKG4pO3RoaXMuY2JzLm9ucHJvY2Vzc2luZ2luc3RydWN0aW9uKGAhJHtzfWAsYCEke259YCl9dGhpcy5zdGFydEluZGV4PXQrMX1vbnByb2Nlc3NpbmdpbnN0cnVjdGlvbihlLHQpe3RoaXMuZW5kSW5kZXg9dDtjb25zdCBuPXRoaXMuZ2V0U2xpY2UoZSx0KTtpZih0aGlzLmNicy5vbnByb2Nlc3NpbmdpbnN0cnVjdGlvbil7Y29uc3Qgcz10aGlzLmdldEluc3RydWN0aW9uTmFtZShuKTt0aGlzLmNicy5vbnByb2Nlc3NpbmdpbnN0cnVjdGlvbihgPyR7c31gLGA/JHtufWApfXRoaXMuc3RhcnRJbmRleD10KzF9b25jb21tZW50KGUsdCxuKXt2YXIgcyxpLGEsbzt0aGlzLmVuZEluZGV4PXQsKGk9KHM9dGhpcy5jYnMpLm9uY29tbWVudCk9PT1udWxsfHxpPT09dm9pZCAwfHxpLmNhbGwocyx0aGlzLmdldFNsaWNlKGUsdC1uKSksKG89KGE9dGhpcy5jYnMpLm9uY29tbWVudGVuZCk9PT1udWxsfHxvPT09dm9pZCAwfHxvLmNhbGwoYSksdGhpcy5zdGFydEluZGV4PXQrMX1vbmNkYXRhKGUsdCxuKXt2YXIgcyxpLGEsbyx1LGwsQSxkLGcsZjt0aGlzLmVuZEluZGV4PXQ7Y29uc3QgQz10aGlzLmdldFNsaWNlKGUsdC1uKTshdGhpcy5odG1sTW9kZXx8dGhpcy5vcHRpb25zLnJlY29nbml6ZUNEQVRBPygoaT0ocz10aGlzLmNicykub25jZGF0YXN0YXJ0KT09PW51bGx8fGk9PT12b2lkIDB8fGkuY2FsbChzKSwobz0oYT10aGlzLmNicykub250ZXh0KT09PW51bGx8fG89PT12b2lkIDB8fG8uY2FsbChhLEMpLChsPSh1PXRoaXMuY2JzKS5vbmNkYXRhZW5kKT09PW51bGx8fGw9PT12b2lkIDB8fGwuY2FsbCh1KSk6KChkPShBPXRoaXMuY2JzKS5vbmNvbW1lbnQpPT09bnVsbHx8ZD09PXZvaWQgMHx8ZC5jYWxsKEEsYFtDREFUQVske0N9XV1gKSwoZj0oZz10aGlzLmNicykub25jb21tZW50ZW5kKT09PW51bGx8fGY9PT12b2lkIDB8fGYuY2FsbChnKSksdGhpcy5zdGFydEluZGV4PXQrMX1vbmVuZCgpe3ZhciBlLHQ7aWYodGhpcy5jYnMub25jbG9zZXRhZyl7dGhpcy5lbmRJbmRleD10aGlzLnN0YXJ0SW5kZXg7Zm9yKGxldCBuPTA7bjx0aGlzLnN0YWNrLmxlbmd0aDtuKyspdGhpcy5jYnMub25jbG9zZXRhZyh0aGlzLnN0YWNrW25dLCEwKX0odD0oZT10aGlzLmNicykub25lbmQpPT09bnVsbHx8dD09PXZvaWQgMHx8dC5jYWxsKGUpfXJlc2V0KCl7dmFyIGUsdCxuLHM7KHQ9KGU9dGhpcy5jYnMpLm9ucmVzZXQpPT09bnVsbHx8dD09PXZvaWQgMHx8dC5jYWxsKGUpLHRoaXMudG9rZW5pemVyLnJlc2V0KCksdGhpcy50YWduYW1lPSIiLHRoaXMuYXR0cmlibmFtZT0iIix0aGlzLmF0dHJpYnM9bnVsbCx0aGlzLnN0YWNrLmxlbmd0aD0wLHRoaXMuc3RhcnRJbmRleD0wLHRoaXMuZW5kSW5kZXg9MCwocz0obj10aGlzLmNicykub25wYXJzZXJpbml0KT09PW51bGx8fHM9PT12b2lkIDB8fHMuY2FsbChuLHRoaXMpLHRoaXMuYnVmZmVycy5sZW5ndGg9MCx0aGlzLmZvcmVpZ25Db250ZXh0Lmxlbmd0aD0wLHRoaXMuZm9yZWlnbkNvbnRleHQudW5zaGlmdCghdGhpcy5odG1sTW9kZSksdGhpcy5idWZmZXJPZmZzZXQ9MCx0aGlzLndyaXRlSW5kZXg9MCx0aGlzLmVuZGVkPSExfXBhcnNlQ29tcGxldGUoZSl7dGhpcy5yZXNldCgpLHRoaXMuZW5kKGUpfWdldFNsaWNlKGUsdCl7Zm9yKDtlLXRoaXMuYnVmZmVyT2Zmc2V0Pj10aGlzLmJ1ZmZlcnNbMF0ubGVuZ3RoOyl0aGlzLnNoaWZ0QnVmZmVyKCk7bGV0IG49dGhpcy5idWZmZXJzWzBdLnNsaWNlKGUtdGhpcy5idWZmZXJPZmZzZXQsdC10aGlzLmJ1ZmZlck9mZnNldCk7Zm9yKDt0LXRoaXMuYnVmZmVyT2Zmc2V0PnRoaXMuYnVmZmVyc1swXS5sZW5ndGg7KXRoaXMuc2hpZnRCdWZmZXIoKSxuKz10aGlzLmJ1ZmZlcnNbMF0uc2xpY2UoMCx0LXRoaXMuYnVmZmVyT2Zmc2V0KTtyZXR1cm4gbn1zaGlmdEJ1ZmZlcigpe3RoaXMuYnVmZmVyT2Zmc2V0Kz10aGlzLmJ1ZmZlcnNbMF0ubGVuZ3RoLHRoaXMud3JpdGVJbmRleC0tLHRoaXMuYnVmZmVycy5zaGlmdCgpfXdyaXRlKGUpe3ZhciB0LG47aWYodGhpcy5lbmRlZCl7KG49KHQ9dGhpcy5jYnMpLm9uZXJyb3IpPT09bnVsbHx8bj09PXZvaWQgMHx8bi5jYWxsKHQsbmV3IEVycm9yKCIud3JpdGUoKSBhZnRlciBkb25lISIpKTtyZXR1cm59dGhpcy5idWZmZXJzLnB1c2goZSksdGhpcy50b2tlbml6ZXIucnVubmluZyYmKHRoaXMudG9rZW5pemVyLndyaXRlKGUpLHRoaXMud3JpdGVJbmRleCsrKX1lbmQoZSl7dmFyIHQsbjtpZih0aGlzLmVuZGVkKXsobj0odD10aGlzLmNicykub25lcnJvcik9PT1udWxsfHxuPT09dm9pZCAwfHxuLmNhbGwodCxuZXcgRXJyb3IoIi5lbmQoKSBhZnRlciBkb25lISIpKTtyZXR1cm59ZSYmdGhpcy53cml0ZShlKSx0aGlzLmVuZGVkPSEwLHRoaXMudG9rZW5pemVyLmVuZCgpfXBhdXNlKCl7dGhpcy50b2tlbml6ZXIucGF1c2UoKX1yZXN1bWUoKXtmb3IodGhpcy50b2tlbml6ZXIucmVzdW1lKCk7dGhpcy50b2tlbml6ZXIucnVubmluZyYmdGhpcy53cml0ZUluZGV4PHRoaXMuYnVmZmVycy5sZW5ndGg7KXRoaXMudG9rZW5pemVyLndyaXRlKHRoaXMuYnVmZmVyc1t0aGlzLndyaXRlSW5kZXgrK10pO3RoaXMuZW5kZWQmJnRoaXMudG9rZW5pemVyLmVuZCgpfXBhcnNlQ2h1bmsoZSl7dGhpcy53cml0ZShlKX1kb25lKGUpe3RoaXMuZW5kKGUpfX07dmFyIGJlOyhmdW5jdGlvbihyKXtyLlJvb3Q9InJvb3QiLHIuVGV4dD0idGV4dCIsci5EaXJlY3RpdmU9ImRpcmVjdGl2ZSIsci5Db21tZW50PSJjb21tZW50IixyLlNjcmlwdD0ic2NyaXB0IixyLlN0eWxlPSJzdHlsZSIsci5UYWc9InRhZyIsci5DREFUQT0iY2RhdGEiLHIuRG9jdHlwZT0iZG9jdHlwZSJ9KShiZXx8KGJlPXt9KSk7ZnVuY3Rpb24ga2kocil7cmV0dXJuIHIudHlwZT09PWJlLlRhZ3x8ci50eXBlPT09YmUuU2NyaXB0fHxyLnR5cGU9PT1iZS5TdHlsZX1jb25zdCBUdT1iZS5Sb290LEJ1PWJlLlRleHQsX3U9YmUuRGlyZWN0aXZlLFJ1PWJlLkNvbW1lbnQsRnU9YmUuU2NyaXB0LE11PWJlLlN0eWxlLE91PWJlLlRhZyxMdT1iZS5DREFUQSxQdT1iZS5Eb2N0eXBlO3ZhciBncD1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxDREFUQTpMdSxDb21tZW50OlJ1LERpcmVjdGl2ZTpfdSxEb2N0eXBlOlB1LGdldCBFbGVtZW50VHlwZSgpe3JldHVybiBiZX0sUm9vdDpUdSxTY3JpcHQ6RnUsU3R5bGU6TXUsVGFnOk91LFRleHQ6QnUsaXNUYWc6a2l9KTtsZXQgVXU9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnBhcmVudD1udWxsLHRoaXMucHJldj1udWxsLHRoaXMubmV4dD1udWxsLHRoaXMuc3RhcnRJbmRleD1udWxsLHRoaXMuZW5kSW5kZXg9bnVsbH1nZXQgcGFyZW50Tm9kZSgpe3JldHVybiB0aGlzLnBhcmVudH1zZXQgcGFyZW50Tm9kZShlKXt0aGlzLnBhcmVudD1lfWdldCBwcmV2aW91c1NpYmxpbmcoKXtyZXR1cm4gdGhpcy5wcmV2fXNldCBwcmV2aW91c1NpYmxpbmcoZSl7dGhpcy5wcmV2PWV9Z2V0IG5leHRTaWJsaW5nKCl7cmV0dXJuIHRoaXMubmV4dH1zZXQgbmV4dFNpYmxpbmcoZSl7dGhpcy5uZXh0PWV9Y2xvbmVOb2RlKGU9ITEpe3JldHVybiBZdSh0aGlzLGUpfX07Y2xhc3MgeGkgZXh0ZW5kcyBVdXtjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMuZGF0YT1lfWdldCBub2RlVmFsdWUoKXtyZXR1cm4gdGhpcy5kYXRhfXNldCBub2RlVmFsdWUoZSl7dGhpcy5kYXRhPWV9fWxldCBUaT1jbGFzcyBleHRlbmRzIHhpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnR5cGU9YmUuVGV4dH1nZXQgbm9kZVR5cGUoKXtyZXR1cm4gM319LEd1PWNsYXNzIGV4dGVuZHMgeGl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMudHlwZT1iZS5Db21tZW50fWdldCBub2RlVHlwZSgpe3JldHVybiA4fX07Y2xhc3MgSHUgZXh0ZW5kcyB4aXtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKHQpLHRoaXMubmFtZT1lLHRoaXMudHlwZT1iZS5EaXJlY3RpdmV9Z2V0IG5vZGVUeXBlKCl7cmV0dXJuIDF9fWNsYXNzIEJpIGV4dGVuZHMgVXV7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLmNoaWxkcmVuPWV9Z2V0IGZpcnN0Q2hpbGQoKXt2YXIgZTtyZXR1cm4oZT10aGlzLmNoaWxkcmVuWzBdKSE9PW51bGwmJmUhPT12b2lkIDA/ZTpudWxsfWdldCBsYXN0Q2hpbGQoKXtyZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGg+MD90aGlzLmNoaWxkcmVuW3RoaXMuY2hpbGRyZW4ubGVuZ3RoLTFdOm51bGx9Z2V0IGNoaWxkTm9kZXMoKXtyZXR1cm4gdGhpcy5jaGlsZHJlbn1zZXQgY2hpbGROb2RlcyhlKXt0aGlzLmNoaWxkcmVuPWV9fWNsYXNzIFF1IGV4dGVuZHMgQml7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMudHlwZT1iZS5DREFUQX1nZXQgbm9kZVR5cGUoKXtyZXR1cm4gNH19bGV0IF9pPWNsYXNzIGV4dGVuZHMgQml7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMudHlwZT1iZS5Sb290fWdldCBub2RlVHlwZSgpe3JldHVybiA5fX0sV3U9Y2xhc3MgZXh0ZW5kcyBCaXtjb25zdHJ1Y3RvcihlLHQsbj1bXSxzPWU9PT0ic2NyaXB0Ij9iZS5TY3JpcHQ6ZT09PSJzdHlsZSI/YmUuU3R5bGU6YmUuVGFnKXtzdXBlcihuKSx0aGlzLm5hbWU9ZSx0aGlzLmF0dHJpYnM9dCx0aGlzLnR5cGU9c31nZXQgbm9kZVR5cGUoKXtyZXR1cm4gMX1nZXQgdGFnTmFtZSgpe3JldHVybiB0aGlzLm5hbWV9c2V0IHRhZ05hbWUoZSl7dGhpcy5uYW1lPWV9Z2V0IGF0dHJpYnV0ZXMoKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5hdHRyaWJzKS5tYXAoZT0+e3ZhciB0LG47cmV0dXJue25hbWU6ZSx2YWx1ZTp0aGlzLmF0dHJpYnNbZV0sbmFtZXNwYWNlOih0PXRoaXNbIngtYXR0cmlic05hbWVzcGFjZSJdKT09PW51bGx8fHQ9PT12b2lkIDA/dm9pZCAwOnRbZV0scHJlZml4OihuPXRoaXNbIngtYXR0cmlic1ByZWZpeCJdKT09PW51bGx8fG49PT12b2lkIDA/dm9pZCAwOm5bZV19fSl9fTtmdW5jdGlvbiBodChyKXtyZXR1cm4ga2kocil9ZnVuY3Rpb24gZ3Mocil7cmV0dXJuIHIudHlwZT09PWJlLkNEQVRBfWZ1bmN0aW9uIGdyKHIpe3JldHVybiByLnR5cGU9PT1iZS5UZXh0fWZ1bmN0aW9uIFJpKHIpe3JldHVybiByLnR5cGU9PT1iZS5Db21tZW50fWZ1bmN0aW9uIG1wKHIpe3JldHVybiByLnR5cGU9PT1iZS5EaXJlY3RpdmV9ZnVuY3Rpb24gS3Uocil7cmV0dXJuIHIudHlwZT09PWJlLlJvb3R9ZnVuY3Rpb24gRHQocil7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLCJjaGlsZHJlbiIpfWZ1bmN0aW9uIFl1KHIsZT0hMSl7bGV0IHQ7aWYoZ3IocikpdD1uZXcgVGkoci5kYXRhKTtlbHNlIGlmKFJpKHIpKXQ9bmV3IEd1KHIuZGF0YSk7ZWxzZSBpZihodChyKSl7Y29uc3Qgbj1lP0ZpKHIuY2hpbGRyZW4pOltdLHM9bmV3IFd1KHIubmFtZSx7Li4uci5hdHRyaWJzfSxuKTtuLmZvckVhY2goaT0+aS5wYXJlbnQ9cyksci5uYW1lc3BhY2UhPW51bGwmJihzLm5hbWVzcGFjZT1yLm5hbWVzcGFjZSksclsieC1hdHRyaWJzTmFtZXNwYWNlIl0mJihzWyJ4LWF0dHJpYnNOYW1lc3BhY2UiXT17Li4uclsieC1hdHRyaWJzTmFtZXNwYWNlIl19KSxyWyJ4LWF0dHJpYnNQcmVmaXgiXSYmKHNbIngtYXR0cmlic1ByZWZpeCJdPXsuLi5yWyJ4LWF0dHJpYnNQcmVmaXgiXX0pLHQ9c31lbHNlIGlmKGdzKHIpKXtjb25zdCBuPWU/Rmkoci5jaGlsZHJlbik6W10scz1uZXcgUXUobik7bi5mb3JFYWNoKGk9PmkucGFyZW50PXMpLHQ9c31lbHNlIGlmKEt1KHIpKXtjb25zdCBuPWU/Rmkoci5jaGlsZHJlbik6W10scz1uZXcgX2kobik7bi5mb3JFYWNoKGk9PmkucGFyZW50PXMpLHJbIngtbW9kZSJdJiYoc1sieC1tb2RlIl09clsieC1tb2RlIl0pLHQ9c31lbHNlIGlmKG1wKHIpKXtjb25zdCBuPW5ldyBIdShyLm5hbWUsci5kYXRhKTtyWyJ4LW5hbWUiXSE9bnVsbCYmKG5bIngtbmFtZSJdPXJbIngtbmFtZSJdLG5bIngtcHVibGljSWQiXT1yWyJ4LXB1YmxpY0lkIl0sblsieC1zeXN0ZW1JZCJdPXJbIngtc3lzdGVtSWQiXSksdD1ufWVsc2UgdGhyb3cgbmV3IEVycm9yKGBOb3QgaW1wbGVtZW50ZWQgeWV0OiAke3IudHlwZX1gKTtyZXR1cm4gdC5zdGFydEluZGV4PXIuc3RhcnRJbmRleCx0LmVuZEluZGV4PXIuZW5kSW5kZXgsci5zb3VyY2VDb2RlTG9jYXRpb24hPW51bGwmJih0LnNvdXJjZUNvZGVMb2NhdGlvbj1yLnNvdXJjZUNvZGVMb2NhdGlvbiksdH1mdW5jdGlvbiBGaShyKXtjb25zdCBlPXIubWFwKHQ9Pll1KHQsITApKTtmb3IobGV0IHQ9MTt0PGUubGVuZ3RoO3QrKyllW3RdLnByZXY9ZVt0LTFdLGVbdC0xXS5uZXh0PWVbdF07cmV0dXJuIGV9Y29uc3QgWnU9e3dpdGhTdGFydEluZGljZXM6ITEsd2l0aEVuZEluZGljZXM6ITEseG1sTW9kZTohMX07Y2xhc3Mgd257Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMuZG9tPVtdLHRoaXMucm9vdD1uZXcgX2kodGhpcy5kb20pLHRoaXMuZG9uZT0hMSx0aGlzLnRhZ1N0YWNrPVt0aGlzLnJvb3RdLHRoaXMubGFzdE5vZGU9bnVsbCx0aGlzLnBhcnNlcj1udWxsLHR5cGVvZiB0PT0iZnVuY3Rpb24iJiYobj10LHQ9WnUpLHR5cGVvZiBlPT0ib2JqZWN0IiYmKHQ9ZSxlPXZvaWQgMCksdGhpcy5jYWxsYmFjaz1lPz9udWxsLHRoaXMub3B0aW9ucz10Pz9adSx0aGlzLmVsZW1lbnRDQj1uPz9udWxsfW9ucGFyc2VyaW5pdChlKXt0aGlzLnBhcnNlcj1lfW9ucmVzZXQoKXt0aGlzLmRvbT1bXSx0aGlzLnJvb3Q9bmV3IF9pKHRoaXMuZG9tKSx0aGlzLmRvbmU9ITEsdGhpcy50YWdTdGFjaz1bdGhpcy5yb290XSx0aGlzLmxhc3ROb2RlPW51bGwsdGhpcy5wYXJzZXI9bnVsbH1vbmVuZCgpe3RoaXMuZG9uZXx8KHRoaXMuZG9uZT0hMCx0aGlzLnBhcnNlcj1udWxsLHRoaXMuaGFuZGxlQ2FsbGJhY2sobnVsbCkpfW9uZXJyb3IoZSl7dGhpcy5oYW5kbGVDYWxsYmFjayhlKX1vbmNsb3NldGFnKCl7dGhpcy5sYXN0Tm9kZT1udWxsO2NvbnN0IGU9dGhpcy50YWdTdGFjay5wb3AoKTt0aGlzLm9wdGlvbnMud2l0aEVuZEluZGljZXMmJihlLmVuZEluZGV4PXRoaXMucGFyc2VyLmVuZEluZGV4KSx0aGlzLmVsZW1lbnRDQiYmdGhpcy5lbGVtZW50Q0IoZSl9b25vcGVudGFnKGUsdCl7Y29uc3Qgbj10aGlzLm9wdGlvbnMueG1sTW9kZT9iZS5UYWc6dm9pZCAwLHM9bmV3IFd1KGUsdCx2b2lkIDAsbik7dGhpcy5hZGROb2RlKHMpLHRoaXMudGFnU3RhY2sucHVzaChzKX1vbnRleHQoZSl7Y29uc3R7bGFzdE5vZGU6dH09dGhpcztpZih0JiZ0LnR5cGU9PT1iZS5UZXh0KXQuZGF0YSs9ZSx0aGlzLm9wdGlvbnMud2l0aEVuZEluZGljZXMmJih0LmVuZEluZGV4PXRoaXMucGFyc2VyLmVuZEluZGV4KTtlbHNle2NvbnN0IG49bmV3IFRpKGUpO3RoaXMuYWRkTm9kZShuKSx0aGlzLmxhc3ROb2RlPW59fW9uY29tbWVudChlKXtpZih0aGlzLmxhc3ROb2RlJiZ0aGlzLmxhc3ROb2RlLnR5cGU9PT1iZS5Db21tZW50KXt0aGlzLmxhc3ROb2RlLmRhdGErPWU7cmV0dXJufWNvbnN0IHQ9bmV3IEd1KGUpO3RoaXMuYWRkTm9kZSh0KSx0aGlzLmxhc3ROb2RlPXR9b25jb21tZW50ZW5kKCl7dGhpcy5sYXN0Tm9kZT1udWxsfW9uY2RhdGFzdGFydCgpe2NvbnN0IGU9bmV3IFRpKCIiKSx0PW5ldyBRdShbZV0pO3RoaXMuYWRkTm9kZSh0KSxlLnBhcmVudD10LHRoaXMubGFzdE5vZGU9ZX1vbmNkYXRhZW5kKCl7dGhpcy5sYXN0Tm9kZT1udWxsfW9ucHJvY2Vzc2luZ2luc3RydWN0aW9uKGUsdCl7Y29uc3Qgbj1uZXcgSHUoZSx0KTt0aGlzLmFkZE5vZGUobil9aGFuZGxlQ2FsbGJhY2soZSl7aWYodHlwZW9mIHRoaXMuY2FsbGJhY2s9PSJmdW5jdGlvbiIpdGhpcy5jYWxsYmFjayhlLHRoaXMuZG9tKTtlbHNlIGlmKGUpdGhyb3cgZX1hZGROb2RlKGUpe2NvbnN0IHQ9dGhpcy50YWdTdGFja1t0aGlzLnRhZ1N0YWNrLmxlbmd0aC0xXSxuPXQuY2hpbGRyZW5bdC5jaGlsZHJlbi5sZW5ndGgtMV07dGhpcy5vcHRpb25zLndpdGhTdGFydEluZGljZXMmJihlLnN0YXJ0SW5kZXg9dGhpcy5wYXJzZXIuc3RhcnRJbmRleCksdGhpcy5vcHRpb25zLndpdGhFbmRJbmRpY2VzJiYoZS5lbmRJbmRleD10aGlzLnBhcnNlci5lbmRJbmRleCksdC5jaGlsZHJlbi5wdXNoKGUpLG4mJihlLnByZXY9bixuLm5leHQ9ZSksZS5wYXJlbnQ9dCx0aGlzLmxhc3ROb2RlPW51bGx9fWZ1bmN0aW9uIGJwKHIpe3JldHVybihyJjY0NTEyKT09PTU1Mjk2fWNvbnN0IENwPVN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXQhPW51bGw/KHIsZSk9PnIuY29kZVBvaW50QXQoZSk6KHIsZSk9PmJwKHIuY2hhckNvZGVBdChlKSk/KHIuY2hhckNvZGVBdChlKS01NTI5NikqMTAyNCtyLmNoYXJDb2RlQXQoZSsxKS01NjMyMCs2NTUzNjpyLmNoYXJDb2RlQXQoZSksVnU9L1siJic8PiRceDgwLVx1RkZGRl0vZyxTcD1uZXcgTWFwKFtbMzQsIiZxdW90OyJdLFszOCwiJmFtcDsiXSxbMzksIiZhcG9zOyJdLFs2MCwiJmx0OyJdLFs2MiwiJmd0OyJdXSk7ZnVuY3Rpb24genUocil7bGV0IGU9IiIsdD0wLG47Zm9yKDsobj1WdS5leGVjKHIpKSE9PW51bGw7KXtjb25zdCBzPW4uaW5kZXgsaT1yLmNoYXJDb2RlQXQocyksYT1TcC5nZXQoaSk7YSE9PXZvaWQgMD8oZSs9ci5zdWJzdHJpbmcodCxzKSthLHQ9cysxKTooZSs9YCR7ci5zdWJzdHJpbmcodCxzKX0mI3gke0NwKHIscykudG9TdHJpbmcoMTYpfTtgLHQ9VnUubGFzdEluZGV4Kz0rKChpJjY1NDA4KT09PTU1Mjk2KSl9cmV0dXJuIGUrci5zdWJzdHIodCl9ZnVuY3Rpb24gSnUocixlKXtyZXR1cm4gZnVuY3Rpb24obil7bGV0IHMsaT0wLGE9IiI7Zm9yKDtzPXIuZXhlYyhuKTspaSE9PXMuaW5kZXgmJihhKz1uLnN1YnN0cmluZyhpLHMuaW5kZXgpKSxhKz1lLmdldChzWzBdLmNoYXJDb2RlQXQoMCkpLGk9cy5pbmRleCsxO3JldHVybiBhK24uc3Vic3RyaW5nKGkpfX1jb25zdCBFcD1KdSgvWyImXHUwMEEwXS9nLG5ldyBNYXAoW1szNCwiJnF1b3Q7Il0sWzM4LCImYW1wOyJdLFsxNjAsIiZuYnNwOyJdXSkpLHlwPUp1KC9bJjw+XHUwMEEwXS9nLG5ldyBNYXAoW1szOCwiJmFtcDsiXSxbNjAsIiZsdDsiXSxbNjIsIiZndDsiXSxbMTYwLCImbmJzcDsiXV0pKSx2cD1uZXcgTWFwKFsiYWx0R2x5cGgiLCJhbHRHbHlwaERlZiIsImFsdEdseXBoSXRlbSIsImFuaW1hdGVDb2xvciIsImFuaW1hdGVNb3Rpb24iLCJhbmltYXRlVHJhbnNmb3JtIiwiY2xpcFBhdGgiLCJmZUJsZW5kIiwiZmVDb2xvck1hdHJpeCIsImZlQ29tcG9uZW50VHJhbnNmZXIiLCJmZUNvbXBvc2l0ZSIsImZlQ29udm9sdmVNYXRyaXgiLCJmZURpZmZ1c2VMaWdodGluZyIsImZlRGlzcGxhY2VtZW50TWFwIiwiZmVEaXN0YW50TGlnaHQiLCJmZURyb3BTaGFkb3ciLCJmZUZsb29kIiwiZmVGdW5jQSIsImZlRnVuY0IiLCJmZUZ1bmNHIiwiZmVGdW5jUiIsImZlR2F1c3NpYW5CbHVyIiwiZmVJbWFnZSIsImZlTWVyZ2UiLCJmZU1lcmdlTm9kZSIsImZlTW9ycGhvbG9neSIsImZlT2Zmc2V0IiwiZmVQb2ludExpZ2h0IiwiZmVTcGVjdWxhckxpZ2h0aW5nIiwiZmVTcG90TGlnaHQiLCJmZVRpbGUiLCJmZVR1cmJ1bGVuY2UiLCJmb3JlaWduT2JqZWN0IiwiZ2x5cGhSZWYiLCJsaW5lYXJHcmFkaWVudCIsInJhZGlhbEdyYWRpZW50IiwidGV4dFBhdGgiXS5tYXAocj0+W3IudG9Mb3dlckNhc2UoKSxyXSkpLHdwPW5ldyBNYXAoWyJkZWZpbml0aW9uVVJMIiwiYXR0cmlidXRlTmFtZSIsImF0dHJpYnV0ZVR5cGUiLCJiYXNlRnJlcXVlbmN5IiwiYmFzZVByb2ZpbGUiLCJjYWxjTW9kZSIsImNsaXBQYXRoVW5pdHMiLCJkaWZmdXNlQ29uc3RhbnQiLCJlZGdlTW9kZSIsImZpbHRlclVuaXRzIiwiZ2x5cGhSZWYiLCJncmFkaWVudFRyYW5zZm9ybSIsImdyYWRpZW50VW5pdHMiLCJrZXJuZWxNYXRyaXgiLCJrZXJuZWxVbml0TGVuZ3RoIiwia2V5UG9pbnRzIiwia2V5U3BsaW5lcyIsImtleVRpbWVzIiwibGVuZ3RoQWRqdXN0IiwibGltaXRpbmdDb25lQW5nbGUiLCJtYXJrZXJIZWlnaHQiLCJtYXJrZXJVbml0cyIsIm1hcmtlcldpZHRoIiwibWFza0NvbnRlbnRVbml0cyIsIm1hc2tVbml0cyIsIm51bU9jdGF2ZXMiLCJwYXRoTGVuZ3RoIiwicGF0dGVybkNvbnRlbnRVbml0cyIsInBhdHRlcm5UcmFuc2Zvcm0iLCJwYXR0ZXJuVW5pdHMiLCJwb2ludHNBdFgiLCJwb2ludHNBdFkiLCJwb2ludHNBdFoiLCJwcmVzZXJ2ZUFscGhhIiwicHJlc2VydmVBc3BlY3RSYXRpbyIsInByaW1pdGl2ZVVuaXRzIiwicmVmWCIsInJlZlkiLCJyZXBlYXRDb3VudCIsInJlcGVhdER1ciIsInJlcXVpcmVkRXh0ZW5zaW9ucyIsInJlcXVpcmVkRmVhdHVyZXMiLCJzcGVjdWxhckNvbnN0YW50Iiwic3BlY3VsYXJFeHBvbmVudCIsInNwcmVhZE1ldGhvZCIsInN0YXJ0T2Zmc2V0Iiwic3RkRGV2aWF0aW9uIiwic3RpdGNoVGlsZXMiLCJzdXJmYWNlU2NhbGUiLCJzeXN0ZW1MYW5ndWFnZSIsInRhYmxlVmFsdWVzIiwidGFyZ2V0WCIsInRhcmdldFkiLCJ0ZXh0TGVuZ3RoIiwidmlld0JveCIsInZpZXdUYXJnZXQiLCJ4Q2hhbm5lbFNlbGVjdG9yIiwieUNoYW5uZWxTZWxlY3RvciIsInpvb21BbmRQYW4iXS5tYXAocj0+W3IudG9Mb3dlckNhc2UoKSxyXSkpLERwPW5ldyBTZXQoWyJzdHlsZSIsInNjcmlwdCIsInhtcCIsImlmcmFtZSIsIm5vZW1iZWQiLCJub2ZyYW1lcyIsInBsYWludGV4dCIsIm5vc2NyaXB0Il0pO2Z1bmN0aW9uIElwKHIpe3JldHVybiByLnJlcGxhY2UoLyIvZywiJnF1b3Q7Iil9ZnVuY3Rpb24gTnAocixlKXt2YXIgdDtpZighcilyZXR1cm47Y29uc3Qgbj0oKHQ9ZS5lbmNvZGVFbnRpdGllcykhPT1udWxsJiZ0IT09dm9pZCAwP3Q6ZS5kZWNvZGVFbnRpdGllcyk9PT0hMT9JcDplLnhtbE1vZGV8fGUuZW5jb2RlRW50aXRpZXMhPT0idXRmOCI/enU6RXA7cmV0dXJuIE9iamVjdC5rZXlzKHIpLm1hcChzPT57dmFyIGksYTtjb25zdCBvPShpPXJbc10pIT09bnVsbCYmaSE9PXZvaWQgMD9pOiIiO3JldHVybiBlLnhtbE1vZGU9PT0iZm9yZWlnbiImJihzPShhPXdwLmdldChzKSkhPT1udWxsJiZhIT09dm9pZCAwP2E6cyksIWUuZW1wdHlBdHRycyYmIWUueG1sTW9kZSYmbz09PSIiP3M6YCR7c309IiR7bihvKX0iYH0pLmpvaW4oIiAiKX1jb25zdCBxdT1uZXcgU2V0KFsiYXJlYSIsImJhc2UiLCJiYXNlZm9udCIsImJyIiwiY29sIiwiY29tbWFuZCIsImVtYmVkIiwiZnJhbWUiLCJociIsImltZyIsImlucHV0IiwiaXNpbmRleCIsImtleWdlbiIsImxpbmsiLCJtZXRhIiwicGFyYW0iLCJzb3VyY2UiLCJ0cmFjayIsIndiciJdKTtmdW5jdGlvbiBtcyhyLGU9e30pe2NvbnN0IHQ9Imxlbmd0aCJpbiByP3I6W3JdO2xldCBuPSIiO2ZvcihsZXQgcz0wO3M8dC5sZW5ndGg7cysrKW4rPWtwKHRbc10sZSk7cmV0dXJuIG59ZnVuY3Rpb24ga3AocixlKXtzd2l0Y2goci50eXBlKXtjYXNlIFR1OnJldHVybiBtcyhyLmNoaWxkcmVuLGUpO2Nhc2UgUHU6Y2FzZSBfdTpyZXR1cm4gX3Aocik7Y2FzZSBSdTpyZXR1cm4gTXAocik7Y2FzZSBMdTpyZXR1cm4gRnAocik7Y2FzZSBGdTpjYXNlIE11OmNhc2UgT3U6cmV0dXJuIEJwKHIsZSk7Y2FzZSBCdTpyZXR1cm4gUnAocixlKX19Y29uc3QgeHA9bmV3IFNldChbIm1pIiwibW8iLCJtbiIsIm1zIiwibXRleHQiLCJhbm5vdGF0aW9uLXhtbCIsImZvcmVpZ25PYmplY3QiLCJkZXNjIiwidGl0bGUiXSksVHA9bmV3IFNldChbInN2ZyIsIm1hdGgiXSk7ZnVuY3Rpb24gQnAocixlKXt2YXIgdDtlLnhtbE1vZGU9PT0iZm9yZWlnbiImJihyLm5hbWU9KHQ9dnAuZ2V0KHIubmFtZSkpIT09bnVsbCYmdCE9PXZvaWQgMD90OnIubmFtZSxyLnBhcmVudCYmeHAuaGFzKHIucGFyZW50Lm5hbWUpJiYoZT17Li4uZSx4bWxNb2RlOiExfSkpLCFlLnhtbE1vZGUmJlRwLmhhcyhyLm5hbWUpJiYoZT17Li4uZSx4bWxNb2RlOiJmb3JlaWduIn0pO2xldCBuPWA8JHtyLm5hbWV9YDtjb25zdCBzPU5wKHIuYXR0cmlicyxlKTtyZXR1cm4gcyYmKG4rPWAgJHtzfWApLHIuY2hpbGRyZW4ubGVuZ3RoPT09MCYmKGUueG1sTW9kZT9lLnNlbGZDbG9zaW5nVGFncyE9PSExOmUuc2VsZkNsb3NpbmdUYWdzJiZxdS5oYXMoci5uYW1lKSk/KGUueG1sTW9kZXx8KG4rPSIgIiksbis9Ii8+Iik6KG4rPSI+IixyLmNoaWxkcmVuLmxlbmd0aD4wJiYobis9bXMoci5jaGlsZHJlbixlKSksKGUueG1sTW9kZXx8IXF1LmhhcyhyLm5hbWUpKSYmKG4rPWA8LyR7ci5uYW1lfT5gKSksbn1mdW5jdGlvbiBfcChyKXtyZXR1cm5gPCR7ci5kYXRhfT5gfWZ1bmN0aW9uIFJwKHIsZSl7dmFyIHQ7bGV0IG49ci5kYXRhfHwiIjtyZXR1cm4oKHQ9ZS5lbmNvZGVFbnRpdGllcykhPT1udWxsJiZ0IT09dm9pZCAwP3Q6ZS5kZWNvZGVFbnRpdGllcykhPT0hMSYmISghZS54bWxNb2RlJiZyLnBhcmVudCYmRHAuaGFzKHIucGFyZW50Lm5hbWUpKSYmKG49ZS54bWxNb2RlfHxlLmVuY29kZUVudGl0aWVzIT09InV0ZjgiP3p1KG4pOnlwKG4pKSxufWZ1bmN0aW9uIEZwKHIpe3JldHVybmA8IVtDREFUQVske3IuY2hpbGRyZW5bMF0uZGF0YX1dXT5gfWZ1bmN0aW9uIE1wKHIpe3JldHVybmA8IS0tJHtyLmRhdGF9LS0+YH1mdW5jdGlvbiBqdShyLGUpe3JldHVybiBtcyhyLGUpfWZ1bmN0aW9uIE9wKHIsZSl7cmV0dXJuIER0KHIpP3IuY2hpbGRyZW4ubWFwKHQ9Pmp1KHQsZSkpLmpvaW4oIiIpOiIifWZ1bmN0aW9uIGJzKHIpe3JldHVybiBBcnJheS5pc0FycmF5KHIpP3IubWFwKGJzKS5qb2luKCIiKTpodChyKT9yLm5hbWU9PT0iYnIiP2AKYDpicyhyLmNoaWxkcmVuKTpncyhyKT9icyhyLmNoaWxkcmVuKTpncihyKT9yLmRhdGE6IiJ9ZnVuY3Rpb24gQ3Mocil7cmV0dXJuIEFycmF5LmlzQXJyYXkocik/ci5tYXAoQ3MpLmpvaW4oIiIpOkR0KHIpJiYhUmkocik/Q3Moci5jaGlsZHJlbik6Z3Iocik/ci5kYXRhOiIifWZ1bmN0aW9uIE1pKHIpe3JldHVybiBBcnJheS5pc0FycmF5KHIpP3IubWFwKE1pKS5qb2luKCIiKTpEdChyKSYmKHIudHlwZT09PWJlLlRhZ3x8Z3MocikpP01pKHIuY2hpbGRyZW4pOmdyKHIpP3IuZGF0YToiIn1mdW5jdGlvbiBYdShyKXtyZXR1cm4gRHQocik/ci5jaGlsZHJlbjpbXX1mdW5jdGlvbiAkdShyKXtyZXR1cm4gci5wYXJlbnR8fG51bGx9ZnVuY3Rpb24gTHAocil7Y29uc3QgZT0kdShyKTtpZihlIT1udWxsKXJldHVybiBYdShlKTtjb25zdCB0PVtyXTtsZXR7cHJldjpuLG5leHQ6c309cjtmb3IoO24hPW51bGw7KXQudW5zaGlmdChuKSx7cHJldjpufT1uO2Zvcig7cyE9bnVsbDspdC5wdXNoKHMpLHtuZXh0OnN9PXM7cmV0dXJuIHR9ZnVuY3Rpb24gUHAocixlKXt2YXIgdDtyZXR1cm4odD1yLmF0dHJpYnMpPT09bnVsbHx8dD09PXZvaWQgMD92b2lkIDA6dFtlXX1mdW5jdGlvbiBVcChyLGUpe3JldHVybiByLmF0dHJpYnMhPW51bGwmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLmF0dHJpYnMsZSkmJnIuYXR0cmlic1tlXSE9bnVsbH1mdW5jdGlvbiBHcChyKXtyZXR1cm4gci5uYW1lfWZ1bmN0aW9uIEhwKHIpe2xldHtuZXh0OmV9PXI7Zm9yKDtlIT09bnVsbCYmIWh0KGUpOykoe25leHQ6ZX09ZSk7cmV0dXJuIGV9ZnVuY3Rpb24gUXAocil7bGV0e3ByZXY6ZX09cjtmb3IoO2UhPT1udWxsJiYhaHQoZSk7KSh7cHJldjplfT1lKTtyZXR1cm4gZX1mdW5jdGlvbiBEbihyKXtpZihyLnByZXYmJihyLnByZXYubmV4dD1yLm5leHQpLHIubmV4dCYmKHIubmV4dC5wcmV2PXIucHJldiksci5wYXJlbnQpe2NvbnN0IGU9ci5wYXJlbnQuY2hpbGRyZW4sdD1lLmxhc3RJbmRleE9mKHIpO3Q+PTAmJmUuc3BsaWNlKHQsMSl9ci5uZXh0PW51bGwsci5wcmV2PW51bGwsci5wYXJlbnQ9bnVsbH1mdW5jdGlvbiBXcChyLGUpe2NvbnN0IHQ9ZS5wcmV2PXIucHJldjt0JiYodC5uZXh0PWUpO2NvbnN0IG49ZS5uZXh0PXIubmV4dDtuJiYobi5wcmV2PWUpO2NvbnN0IHM9ZS5wYXJlbnQ9ci5wYXJlbnQ7aWYocyl7Y29uc3QgaT1zLmNoaWxkcmVuO2lbaS5sYXN0SW5kZXhPZihyKV09ZSxyLnBhcmVudD1udWxsfX1mdW5jdGlvbiBLcChyLGUpe2lmKERuKGUpLGUubmV4dD1udWxsLGUucGFyZW50PXIsci5jaGlsZHJlbi5wdXNoKGUpPjEpe2NvbnN0IHQ9ci5jaGlsZHJlbltyLmNoaWxkcmVuLmxlbmd0aC0yXTt0Lm5leHQ9ZSxlLnByZXY9dH1lbHNlIGUucHJldj1udWxsfWZ1bmN0aW9uIFlwKHIsZSl7RG4oZSk7Y29uc3R7cGFyZW50OnR9PXIsbj1yLm5leHQ7aWYoZS5uZXh0PW4sZS5wcmV2PXIsci5uZXh0PWUsZS5wYXJlbnQ9dCxuKXtpZihuLnByZXY9ZSx0KXtjb25zdCBzPXQuY2hpbGRyZW47cy5zcGxpY2Uocy5sYXN0SW5kZXhPZihuKSwwLGUpfX1lbHNlIHQmJnQuY2hpbGRyZW4ucHVzaChlKX1mdW5jdGlvbiBacChyLGUpe2lmKERuKGUpLGUucGFyZW50PXIsZS5wcmV2PW51bGwsci5jaGlsZHJlbi51bnNoaWZ0KGUpIT09MSl7Y29uc3QgdD1yLmNoaWxkcmVuWzFdO3QucHJldj1lLGUubmV4dD10fWVsc2UgZS5uZXh0PW51bGx9ZnVuY3Rpb24gVnAocixlKXtEbihlKTtjb25zdHtwYXJlbnQ6dH09cjtpZih0KXtjb25zdCBuPXQuY2hpbGRyZW47bi5zcGxpY2Uobi5pbmRleE9mKHIpLDAsZSl9ci5wcmV2JiYoci5wcmV2Lm5leHQ9ZSksZS5wYXJlbnQ9dCxlLnByZXY9ci5wcmV2LGUubmV4dD1yLHIucHJldj1lfWZ1bmN0aW9uIEluKHIsZSx0PSEwLG49MS8wKXtyZXR1cm4gZWwocixBcnJheS5pc0FycmF5KGUpP2U6W2VdLHQsbil9ZnVuY3Rpb24gZWwocixlLHQsbil7Y29uc3Qgcz1bXSxpPVtBcnJheS5pc0FycmF5KGUpP2U6W2VdXSxhPVswXTtmb3IoOzspe2lmKGFbMF0+PWlbMF0ubGVuZ3RoKXtpZihhLmxlbmd0aD09PTEpcmV0dXJuIHM7aS5zaGlmdCgpLGEuc2hpZnQoKTtjb250aW51ZX1jb25zdCBvPWlbMF1bYVswXSsrXTtpZihyKG8pJiYocy5wdXNoKG8pLC0tbjw9MCkpcmV0dXJuIHM7dCYmRHQobykmJm8uY2hpbGRyZW4ubGVuZ3RoPjAmJihhLnVuc2hpZnQoMCksaS51bnNoaWZ0KG8uY2hpbGRyZW4pKX19ZnVuY3Rpb24genAocixlKXtyZXR1cm4gZS5maW5kKHIpfWZ1bmN0aW9uIE9pKHIsZSx0PSEwKXtjb25zdCBuPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07Zm9yKGxldCBzPTA7czxuLmxlbmd0aDtzKyspe2NvbnN0IGk9bltzXTtpZihodChpKSYmcihpKSlyZXR1cm4gaTtpZih0JiZEdChpKSYmaS5jaGlsZHJlbi5sZW5ndGg+MCl7Y29uc3QgYT1PaShyLGkuY2hpbGRyZW4sITApO2lmKGEpcmV0dXJuIGF9fXJldHVybiBudWxsfWZ1bmN0aW9uIHRsKHIsZSl7cmV0dXJuKEFycmF5LmlzQXJyYXkoZSk/ZTpbZV0pLnNvbWUodD0+aHQodCkmJnIodCl8fER0KHQpJiZ0bChyLHQuY2hpbGRyZW4pKX1mdW5jdGlvbiBKcChyLGUpe2NvbnN0IHQ9W10sbj1bQXJyYXkuaXNBcnJheShlKT9lOltlXV0scz1bMF07Zm9yKDs7KXtpZihzWzBdPj1uWzBdLmxlbmd0aCl7aWYobi5sZW5ndGg9PT0xKXJldHVybiB0O24uc2hpZnQoKSxzLnNoaWZ0KCk7Y29udGludWV9Y29uc3QgaT1uWzBdW3NbMF0rK107aHQoaSkmJnIoaSkmJnQucHVzaChpKSxEdChpKSYmaS5jaGlsZHJlbi5sZW5ndGg+MCYmKHMudW5zaGlmdCgwKSxuLnVuc2hpZnQoaS5jaGlsZHJlbikpfX1jb25zdCBTcz17dGFnX25hbWUocil7cmV0dXJuIHR5cGVvZiByPT0iZnVuY3Rpb24iP2U9Pmh0KGUpJiZyKGUubmFtZSk6cj09PSIqIj9odDplPT5odChlKSYmZS5uYW1lPT09cn0sdGFnX3R5cGUocil7cmV0dXJuIHR5cGVvZiByPT0iZnVuY3Rpb24iP2U9PnIoZS50eXBlKTplPT5lLnR5cGU9PT1yfSx0YWdfY29udGFpbnMocil7cmV0dXJuIHR5cGVvZiByPT0iZnVuY3Rpb24iP2U9PmdyKGUpJiZyKGUuZGF0YSk6ZT0+Z3IoZSkmJmUuZGF0YT09PXJ9fTtmdW5jdGlvbiBMaShyLGUpe3JldHVybiB0eXBlb2YgZT09ImZ1bmN0aW9uIj90PT5odCh0KSYmZSh0LmF0dHJpYnNbcl0pOnQ9Pmh0KHQpJiZ0LmF0dHJpYnNbcl09PT1lfWZ1bmN0aW9uIHFwKHIsZSl7cmV0dXJuIHQ9PnIodCl8fGUodCl9ZnVuY3Rpb24gcmwocil7Y29uc3QgZT1PYmplY3Qua2V5cyhyKS5tYXAodD0+e2NvbnN0IG49clt0XTtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFNzLHQpP1NzW3RdKG4pOkxpKHQsbil9KTtyZXR1cm4gZS5sZW5ndGg9PT0wP251bGw6ZS5yZWR1Y2UocXApfWZ1bmN0aW9uIGpwKHIsZSl7Y29uc3QgdD1ybChyKTtyZXR1cm4gdD90KGUpOiEwfWZ1bmN0aW9uIFhwKHIsZSx0LG49MS8wKXtjb25zdCBzPXJsKHIpO3JldHVybiBzP0luKHMsZSx0LG4pOltdfWZ1bmN0aW9uICRwKHIsZSx0PSEwKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKXx8KGU9W2VdKSxPaShMaSgiaWQiLHIpLGUsdCl9ZnVuY3Rpb24gcXIocixlLHQ9ITAsbj0xLzApe3JldHVybiBJbihTcy50YWdfbmFtZShyKSxlLHQsbil9ZnVuY3Rpb24gZWcocixlLHQ9ITAsbj0xLzApe3JldHVybiBJbihMaSgiY2xhc3MiLHIpLGUsdCxuKX1mdW5jdGlvbiB0ZyhyLGUsdD0hMCxuPTEvMCl7cmV0dXJuIEluKFNzLnRhZ190eXBlKHIpLGUsdCxuKX1mdW5jdGlvbiByZyhyKXtsZXQgZT1yLmxlbmd0aDtmb3IoOy0tZT49MDspe2NvbnN0IHQ9cltlXTtpZihlPjAmJnIubGFzdEluZGV4T2YodCxlLTEpPj0wKXtyLnNwbGljZShlLDEpO2NvbnRpbnVlfWZvcihsZXQgbj10LnBhcmVudDtuO249bi5wYXJlbnQpaWYoci5pbmNsdWRlcyhuKSl7ci5zcGxpY2UoZSwxKTticmVha319cmV0dXJuIHJ9dmFyIEN0OyhmdW5jdGlvbihyKXtyW3IuRElTQ09OTkVDVEVEPTFdPSJESVNDT05ORUNURUQiLHJbci5QUkVDRURJTkc9Ml09IlBSRUNFRElORyIscltyLkZPTExPV0lORz00XT0iRk9MTE9XSU5HIixyW3IuQ09OVEFJTlM9OF09IkNPTlRBSU5TIixyW3IuQ09OVEFJTkVEX0JZPTE2XT0iQ09OVEFJTkVEX0JZIn0pKEN0fHwoQ3Q9e30pKTtmdW5jdGlvbiBubChyLGUpe2NvbnN0IHQ9W10sbj1bXTtpZihyPT09ZSlyZXR1cm4gMDtsZXQgcz1EdChyKT9yOnIucGFyZW50O2Zvcig7czspdC51bnNoaWZ0KHMpLHM9cy5wYXJlbnQ7Zm9yKHM9RHQoZSk/ZTplLnBhcmVudDtzOyluLnVuc2hpZnQocykscz1zLnBhcmVudDtjb25zdCBpPU1hdGgubWluKHQubGVuZ3RoLG4ubGVuZ3RoKTtsZXQgYT0wO2Zvcig7YTxpJiZ0W2FdPT09blthXTspYSsrO2lmKGE9PT0wKXJldHVybiBDdC5ESVNDT05ORUNURUQ7Y29uc3Qgbz10W2EtMV0sdT1vLmNoaWxkcmVuLGw9dFthXSxBPW5bYV07cmV0dXJuIHUuaW5kZXhPZihsKT51LmluZGV4T2YoQSk/bz09PWU/Q3QuRk9MTE9XSU5HfEN0LkNPTlRBSU5FRF9CWTpDdC5GT0xMT1dJTkc6bz09PXI/Q3QuUFJFQ0VESU5HfEN0LkNPTlRBSU5TOkN0LlBSRUNFRElOR31mdW5jdGlvbiBuZyhyKXtyZXR1cm4gcj1yLmZpbHRlcigoZSx0LG4pPT4hbi5pbmNsdWRlcyhlLHQrMSkpLHIuc29ydCgoZSx0KT0+e2NvbnN0IG49bmwoZSx0KTtyZXR1cm4gbiZDdC5QUkVDRURJTkc/LTE6biZDdC5GT0xMT1dJTkc/MTowfSkscn1mdW5jdGlvbiBQaShyKXtjb25zdCBlPUVzKHVnLHIpO3JldHVybiBlP2UubmFtZT09PSJmZWVkIj9zZyhlKTppZyhlKTpudWxsfWZ1bmN0aW9uIHNnKHIpe3ZhciBlO2NvbnN0IHQ9ci5jaGlsZHJlbixuPXt0eXBlOiJhdG9tIixpdGVtczpxcigiZW50cnkiLHQpLm1hcChhPT57dmFyIG87Y29uc3R7Y2hpbGRyZW46dX09YSxsPXttZWRpYTpzbCh1KX07b3QobCwiaWQiLCJpZCIsdSksb3QobCwidGl0bGUiLCJ0aXRsZSIsdSk7Y29uc3QgQT0obz1FcygibGluayIsdSkpPT09bnVsbHx8bz09PXZvaWQgMD92b2lkIDA6by5hdHRyaWJzLmhyZWY7QSYmKGwubGluaz1BKTtjb25zdCBkPXNyKCJzdW1tYXJ5Iix1KXx8c3IoImNvbnRlbnQiLHUpO2QmJihsLmRlc2NyaXB0aW9uPWQpO2NvbnN0IGc9c3IoInVwZGF0ZWQiLHUpO3JldHVybiBnJiYobC5wdWJEYXRlPW5ldyBEYXRlKGcpKSxsfSl9O290KG4sImlkIiwiaWQiLHQpLG90KG4sInRpdGxlIiwidGl0bGUiLHQpO2NvbnN0IHM9KGU9RXMoImxpbmsiLHQpKT09PW51bGx8fGU9PT12b2lkIDA/dm9pZCAwOmUuYXR0cmlicy5ocmVmO3MmJihuLmxpbms9cyksb3QobiwiZGVzY3JpcHRpb24iLCJzdWJ0aXRsZSIsdCk7Y29uc3QgaT1zcigidXBkYXRlZCIsdCk7cmV0dXJuIGkmJihuLnVwZGF0ZWQ9bmV3IERhdGUoaSkpLG90KG4sImF1dGhvciIsImVtYWlsIix0LCEwKSxufWZ1bmN0aW9uIGlnKHIpe3ZhciBlLHQ7Y29uc3Qgbj0odD0oZT1FcygiY2hhbm5lbCIsci5jaGlsZHJlbikpPT09bnVsbHx8ZT09PXZvaWQgMD92b2lkIDA6ZS5jaGlsZHJlbikhPT1udWxsJiZ0IT09dm9pZCAwP3Q6W10scz17dHlwZTpyLm5hbWUuc3Vic3RyKDAsMyksaWQ6IiIsaXRlbXM6cXIoIml0ZW0iLHIuY2hpbGRyZW4pLm1hcChhPT57Y29uc3R7Y2hpbGRyZW46b309YSx1PXttZWRpYTpzbChvKX07b3QodSwiaWQiLCJndWlkIixvKSxvdCh1LCJ0aXRsZSIsInRpdGxlIixvKSxvdCh1LCJsaW5rIiwibGluayIsbyksb3QodSwiZGVzY3JpcHRpb24iLCJkZXNjcmlwdGlvbiIsbyk7Y29uc3QgbD1zcigicHViRGF0ZSIsbyl8fHNyKCJkYzpkYXRlIixvKTtyZXR1cm4gbCYmKHUucHViRGF0ZT1uZXcgRGF0ZShsKSksdX0pfTtvdChzLCJ0aXRsZSIsInRpdGxlIixuKSxvdChzLCJsaW5rIiwibGluayIsbiksb3QocywiZGVzY3JpcHRpb24iLCJkZXNjcmlwdGlvbiIsbik7Y29uc3QgaT1zcigibGFzdEJ1aWxkRGF0ZSIsbik7cmV0dXJuIGkmJihzLnVwZGF0ZWQ9bmV3IERhdGUoaSkpLG90KHMsImF1dGhvciIsIm1hbmFnaW5nRWRpdG9yIixuLCEwKSxzfWNvbnN0IGFnPVsidXJsIiwidHlwZSIsImxhbmciXSxvZz1bImZpbGVTaXplIiwiYml0cmF0ZSIsImZyYW1lcmF0ZSIsInNhbXBsaW5ncmF0ZSIsImNoYW5uZWxzIiwiZHVyYXRpb24iLCJoZWlnaHQiLCJ3aWR0aCJdO2Z1bmN0aW9uIHNsKHIpe3JldHVybiBxcigibWVkaWE6Y29udGVudCIscikubWFwKGU9Pntjb25zdHthdHRyaWJzOnR9PWUsbj17bWVkaXVtOnQubWVkaXVtLGlzRGVmYXVsdDohIXQuaXNEZWZhdWx0fTtmb3IoY29uc3QgcyBvZiBhZyl0W3NdJiYobltzXT10W3NdKTtmb3IoY29uc3QgcyBvZiBvZyl0W3NdJiYobltzXT1wYXJzZUludCh0W3NdLDEwKSk7cmV0dXJuIHQuZXhwcmVzc2lvbiYmKG4uZXhwcmVzc2lvbj10LmV4cHJlc3Npb24pLG59KX1mdW5jdGlvbiBFcyhyLGUpe3JldHVybiBxcihyLGUsITAsMSlbMF19ZnVuY3Rpb24gc3IocixlLHQ9ITEpe3JldHVybiBDcyhxcihyLGUsdCwxKSkudHJpbSgpfWZ1bmN0aW9uIG90KHIsZSx0LG4scz0hMSl7Y29uc3QgaT1zcih0LG4scyk7aSYmKHJbZV09aSl9ZnVuY3Rpb24gdWcocil7cmV0dXJuIHI9PT0icnNzInx8cj09PSJmZWVkInx8cj09PSJyZGY6UkRGIn12YXIgbGc9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsZ2V0IERvY3VtZW50UG9zaXRpb24oKXtyZXR1cm4gQ3R9LGFwcGVuZDpZcCxhcHBlbmRDaGlsZDpLcCxjb21wYXJlRG9jdW1lbnRQb3NpdGlvbjpubCxleGlzdHNPbmU6dGwsZmlsdGVyOkluLGZpbmQ6ZWwsZmluZEFsbDpKcCxmaW5kT25lOk9pLGZpbmRPbmVDaGlsZDp6cCxnZXRBdHRyaWJ1dGVWYWx1ZTpQcCxnZXRDaGlsZHJlbjpYdSxnZXRFbGVtZW50QnlJZDokcCxnZXRFbGVtZW50czpYcCxnZXRFbGVtZW50c0J5Q2xhc3NOYW1lOmVnLGdldEVsZW1lbnRzQnlUYWdOYW1lOnFyLGdldEVsZW1lbnRzQnlUYWdUeXBlOnRnLGdldEZlZWQ6UGksZ2V0SW5uZXJIVE1MOk9wLGdldE5hbWU6R3AsZ2V0T3V0ZXJIVE1MOmp1LGdldFBhcmVudDokdSxnZXRTaWJsaW5nczpMcCxnZXRUZXh0OmJzLGhhc0F0dHJpYjpVcCxoYXNDaGlsZHJlbjpEdCxpbm5lclRleHQ6TWksaXNDREFUQTpncyxpc0NvbW1lbnQ6UmksaXNEb2N1bWVudDpLdSxpc1RhZzpodCxpc1RleHQ6Z3IsbmV4dEVsZW1lbnRTaWJsaW5nOkhwLHByZXBlbmQ6VnAscHJlcGVuZENoaWxkOlpwLHByZXZFbGVtZW50U2libGluZzpRcCxyZW1vdmVFbGVtZW50OkRuLHJlbW92ZVN1YnNldHM6cmcscmVwbGFjZUVsZW1lbnQ6V3AsdGVzdEVsZW1lbnQ6anAsdGV4dENvbnRlbnQ6Q3MsdW5pcXVlU29ydDpuZ30pO2Z1bmN0aW9uIGlsKHIsZSl7Y29uc3QgdD1uZXcgd24odm9pZCAwLGUpO3JldHVybiBuZXcgcHModCxlKS5lbmQociksdC5yb290fWZ1bmN0aW9uIGFsKHIsZSl7cmV0dXJuIGlsKHIsZSkuY2hpbGRyZW59ZnVuY3Rpb24gY2cocixlLHQpe2NvbnN0IG49bmV3IHduKHM9PnIocyxuLnJvb3QpLGUsdCk7cmV0dXJuIG5ldyBwcyhuLGUpfWZ1bmN0aW9uIGhnKHIsZSx0KXtjb25zdCBuPW5ldyB3bihyLGUsdCk7cmV0dXJuIG5ldyBwcyhuLGUpfWNvbnN0IEFnPXt4bWxNb2RlOiEwfTtmdW5jdGlvbiBkZyhyLGU9QWcpe3JldHVybiBQaShhbChyLGUpKX12YXIgZmc9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsRGVmYXVsdEhhbmRsZXI6d24sRG9tSGFuZGxlcjp3bixEb21VdGlsczpsZyxFbGVtZW50VHlwZTpncCxQYXJzZXI6cHMsZ2V0IFF1b3RlVHlwZSgpe3JldHVybiB3dH0sVG9rZW5pemVyOnd1LGNyZWF0ZURvY3VtZW50U3RyZWFtOmNnLGNyZWF0ZURvbVN0cmVhbTpoZyxnZXRGZWVkOlBpLHBhcnNlRE9NOmFsLHBhcnNlRG9jdW1lbnQ6aWwscGFyc2VGZWVkOmRnfSk7Y29uc3QgaXI9LTEseWU9MSxxZT0yLFhlPTMsUnQ9NCxLdD04LG1yPTksanI9MTAsWXQ9MTEscGc9bmV3IFNldChbIkFSVElDTEUiLCJBU0lERSIsIkJMT0NLUVVPVEUiLCJCT0RZIiwiQlIiLCJCVVRUT04iLCJDQU5WQVMiLCJDQVBUSU9OIiwiQ09MIiwiQ09MR1JPVVAiLCJERCIsIkRJViIsIkRMIiwiRFQiLCJFTUJFRCIsIkZJRUxEU0VUIiwiRklHQ0FQVElPTiIsIkZJR1VSRSIsIkZPT1RFUiIsIkZPUk0iLCJIMSIsIkgyIiwiSDMiLCJINCIsIkg1IiwiSDYiLCJMSSIsIlVMIiwiT0wiLCJQIl0pLGdnPS0xLG1nPTEsYmc9NCxDZz04LFNnPTEyOCxFZz0xLG9sPTIsdWw9NCx5Zz04LHZnPTE2LHdnPTMyLHlzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIse2Fzc2lnbjpEZyxjcmVhdGU6SWcsZGVmaW5lUHJvcGVydGllczpOZyxlbnRyaWVzOmtnLGdldE93blByb3BlcnR5RGVzY3JpcHRvcnM6R2Isa2V5czp4ZyxzZXRQcm90b3R5cGVPZjpydH09T2JqZWN0LGJyPVN0cmluZyx1dD1yPT5yLm5vZGVUeXBlPT09eWU/cltpZV06cixhcj0oe293bmVyRG9jdW1lbnQ6cn0pPT5yW1ZyXS5pZ25vcmVDYXNlLEl0PShyLGUpPT57clskXT1lLGVbWWVdPXJ9LGxsPShyLGUsdCk9PntJdChyLGUpLEl0KHV0KGUpLHQpfSxjbD0ocixlLHQsbik9PntJdChyLGUpLEl0KHV0KHQpLG4pfSx2cz0ocixlLHQpPT57SXQocixlKSxJdChlLHQpfSxVaT0oe2xvY2FsTmFtZTpyLG93bmVyRG9jdW1lbnQ6ZX0pPT5lW1ZyXS5pZ25vcmVDYXNlP3IudG9VcHBlckNhc2UoKTpyLGhsPShyLGUpPT57ciYmKHJbJF09ZSksZSYmKGVbWWVdPXIpfSxBbD0ocixlKT0+e2NvbnN0IHQ9ci5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksbj1yLmNyZWF0ZUVsZW1lbnQoIiIpO24uaW5uZXJIVE1MPWU7Y29uc3R7Zmlyc3RDaGlsZDpzLGxhc3RDaGlsZDppfT1uO2lmKHMpe2NsKHQscyxpLHRbaWVdKTtsZXQgYT1zO2RvIGEucGFyZW50Tm9kZT10O3doaWxlKGEhPT1pJiYoYT11dChhKVskXSkpfXJldHVybiB0fSxvcj1uZXcgV2Vha01hcDtsZXQgd3M9ITE7Y29uc3QgWHI9bmV3IFdlYWtNYXAsQ3I9bmV3IFdlYWtNYXAsRHM9KHIsZSx0LG4pPT57d3MmJkNyLmhhcyhyKSYmci5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2smJnIuY29uc3RydWN0b3Iub2JzZXJ2ZWRBdHRyaWJ1dGVzLmluY2x1ZGVzKGUpJiZyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhlLHQsbil9LGRsPShyLGUpPT50PT57aWYoQ3IuaGFzKHQpKXtjb25zdCBuPUNyLmdldCh0KTtuLmNvbm5lY3RlZCE9PWUmJnQuaXNDb25uZWN0ZWQ9PT1lJiYobi5jb25uZWN0ZWQ9ZSxyIGluIHQmJnRbcl0oKSl9fSxmbD1kbCgiY29ubmVjdGVkQ2FsbGJhY2siLCEwKSxHaT1yPT57aWYod3Mpe2ZsKHIpLG9yLmhhcyhyKSYmKHI9b3IuZ2V0KHIpLnNoYWRvd1Jvb3QpO2xldHtbJF06ZSxbaWVdOnR9PXI7Zm9yKDtlIT09dDspZS5ub2RlVHlwZT09PXllJiZmbChlKSxlPWVbJF19fSxwbD1kbCgiZGlzY29ubmVjdGVkQ2FsbGJhY2siLCExKSxUZz1yPT57aWYod3Mpe3BsKHIpLG9yLmhhcyhyKSYmKHI9b3IuZ2V0KHIpLnNoYWRvd1Jvb3QpO2xldHtbJF06ZSxbaWVdOnR9PXI7Zm9yKDtlIT09dDspZS5ub2RlVHlwZT09PXllJiZwbChlKSxlPWVbJF19fTtjbGFzcyBCZ3tjb25zdHJ1Y3RvcihlKXt0aGlzLm93bmVyRG9jdW1lbnQ9ZSx0aGlzLnJlZ2lzdHJ5PW5ldyBNYXAsdGhpcy53YWl0aW5nPW5ldyBNYXAsdGhpcy5hY3RpdmU9ITF9ZGVmaW5lKGUsdCxuPXt9KXtjb25zdHtvd25lckRvY3VtZW50OnMscmVnaXN0cnk6aSx3YWl0aW5nOmF9PXRoaXM7aWYoaS5oYXMoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmFibGUgdG8gcmVkZWZpbmUgIitlKTtpZihYci5oYXModCkpdGhyb3cgbmV3IEVycm9yKCJ1bmFibGUgdG8gcmVkZWZpbmUgdGhlIHNhbWUgY2xhc3M6ICIrdCk7dGhpcy5hY3RpdmU9d3M9ITA7Y29uc3R7ZXh0ZW5kczpvfT1uO1hyLnNldCh0LHtvd25lckRvY3VtZW50OnMsb3B0aW9uczp7aXM6bz9lOiIifSxsb2NhbE5hbWU6b3x8ZX0pO2NvbnN0IHU9bz9sPT5sLmxvY2FsTmFtZT09PW8mJmwuZ2V0QXR0cmlidXRlKCJpcyIpPT09ZTpsPT5sLmxvY2FsTmFtZT09PWU7aWYoaS5zZXQoZSx7Q2xhc3M6dCxjaGVjazp1fSksYS5oYXMoZSkpe2Zvcihjb25zdCBsIG9mIGEuZ2V0KGUpKWwodCk7YS5kZWxldGUoZSl9cy5xdWVyeVNlbGVjdG9yQWxsKG8/YCR7b31baXM9IiR7ZX0iXWA6ZSkuZm9yRWFjaCh0aGlzLnVwZ3JhZGUsdGhpcyl9dXBncmFkZShlKXtpZihDci5oYXMoZSkpcmV0dXJuO2NvbnN0e293bmVyRG9jdW1lbnQ6dCxyZWdpc3RyeTpufT10aGlzLHM9ZS5nZXRBdHRyaWJ1dGUoImlzIil8fGUubG9jYWxOYW1lO2lmKG4uaGFzKHMpKXtjb25zdHtDbGFzczppLGNoZWNrOmF9PW4uZ2V0KHMpO2lmKGEoZSkpe2NvbnN0e2F0dHJpYnV0ZXM6byxpc0Nvbm5lY3RlZDp1fT1lO2Zvcihjb25zdCBBIG9mIG8pZS5yZW1vdmVBdHRyaWJ1dGVOb2RlKEEpO2NvbnN0IGw9a2coZSk7Zm9yKGNvbnN0W0Fdb2YgbClkZWxldGUgZVtBXTtydChlLGkucHJvdG90eXBlKSx0W3ZuXT17ZWxlbWVudDplLHZhbHVlczpsfSxuZXcgaSh0LHMpLENyLnNldChlLHtjb25uZWN0ZWQ6dX0pO2Zvcihjb25zdCBBIG9mIG8pZS5zZXRBdHRyaWJ1dGVOb2RlKEEpO3UmJmUuY29ubmVjdGVkQ2FsbGJhY2smJmUuY29ubmVjdGVkQ2FsbGJhY2soKX19fXdoZW5EZWZpbmVkKGUpe2NvbnN0e3JlZ2lzdHJ5OnQsd2FpdGluZzpufT10aGlzO3JldHVybiBuZXcgUHJvbWlzZShzPT57dC5oYXMoZSk/cyh0LmdldChlKS5DbGFzcyk6KG4uaGFzKGUpfHxuLnNldChlLFtdKSxuLmdldChlKS5wdXNoKHMpKX0pfWdldChlKXtjb25zdCB0PXRoaXMucmVnaXN0cnkuZ2V0KGUpO3JldHVybiB0JiZ0LkNsYXNzfWdldE5hbWUoZSl7aWYoWHIuaGFzKGUpKXtjb25zdHtsb2NhbE5hbWU6dH09WHIuZ2V0KGUpO3JldHVybiB0fXJldHVybiBudWxsfX1jb25zdHtQYXJzZXI6X2d9PWZnLFNyPShyLGUsdCk9Pntjb25zdCBuPXJbaWVdO3JldHVybiBlLnBhcmVudE5vZGU9cixsbChuW1llXSxlLG4pLHQmJmUubm9kZVR5cGU9PT15ZSYmR2koZSksZX0sUmc9KHIsZSx0LG4scyk9Pnt0W2tlXT1uLHQub3duZXJFbGVtZW50PXIsdnMoZVtZZV0sdCxlKSx0Lm5hbWU9PT0iY2xhc3MiJiYoci5jbGFzc05hbWU9bikscyYmRHMocix0Lm5hbWUsbnVsbCxuKX0sZ2w9KHIsZSx0KT0+e2NvbnN0e2FjdGl2ZTpuLHJlZ2lzdHJ5OnN9PXJbeXRdO2xldCBpPXIsYT1udWxsLG89ITE7Y29uc3QgdT1uZXcgX2coe29ucHJvY2Vzc2luZ2luc3RydWN0aW9uKGwsQSl7bC50b0xvd2VyQ2FzZSgpPT09IiFkb2N0eXBlIiYmKHIuZG9jdHlwZT1BLnNsaWNlKGwubGVuZ3RoKS50cmltKCkpfSxvbm9wZW50YWcobCxBKXtsZXQgZD0hMDtpZihlKXtpZihhKWk9U3IoaSxyLmNyZWF0ZUVsZW1lbnROUyh5cyxsKSxuKSxpLm93bmVyU1ZHRWxlbWVudD1hLGQ9ITE7ZWxzZSBpZihsPT09InN2ZyJ8fGw9PT0iU1ZHIilhPXIuY3JlYXRlRWxlbWVudE5TKHlzLGwpLGk9U3IoaSxhLG4pLGQ9ITE7ZWxzZSBpZihuKXtjb25zdCBmPWwuaW5jbHVkZXMoIi0iKT9sOkEuaXN8fCIiO2lmKGYmJnMuaGFzKGYpKXtjb25zdHtDbGFzczpDfT1zLmdldChmKTtpPVNyKGksbmV3IEMsbiksZGVsZXRlIEEuaXMsZD0hMX19fWQmJihpPVNyKGksci5jcmVhdGVFbGVtZW50KGwpLCExKSk7bGV0IGc9aVtpZV07Zm9yKGNvbnN0IGYgb2YgeGcoQSkpUmcoaSxnLHIuY3JlYXRlQXR0cmlidXRlKGYpLEFbZl0sbil9LG9uY29tbWVudChsKXtTcihpLHIuY3JlYXRlQ29tbWVudChsKSxuKX0sb250ZXh0KGwpe28/U3IoaSxyLmNyZWF0ZUNEQVRBU2VjdGlvbihsKSxuKTpTcihpLHIuY3JlYXRlVGV4dE5vZGUobCksbil9LG9uY2RhdGFzdGFydCgpe289ITB9LG9uY2RhdGFlbmQoKXtvPSExfSxvbmNsb3NldGFnKCl7ZSYmaT09PWEmJihhPW51bGwpLGk9aS5wYXJlbnROb2RlfX0se2xvd2VyQ2FzZUF0dHJpYnV0ZU5hbWVzOiExLGRlY29kZUVudGl0aWVzOiEwLHhtbE1vZGU6IWV9KTtyZXR1cm4gdS53cml0ZSh0KSx1LmVuZCgpLHJ9LElzPW5ldyBNYXAsV2U9KHIsZSk9Pntmb3IoY29uc3QgdCBvZltdLmNvbmNhdChyKSlJcy5zZXQodCxlKSxJcy5zZXQodC50b1VwcGVyQ2FzZSgpLGUpfSxtbD0oe1skXTpyLFtpZV06ZX0sdCk9Pntmb3IoO3IhPT1lOyl7c3dpdGNoKHIubm9kZVR5cGUpe2Nhc2UgcWU6Ymwocix0KTticmVhaztjYXNlIFhlOmNhc2UgS3Q6Y2FzZSBSdDpDbChyLHQpO2JyZWFrO2Nhc2UgeWU6RWwocix0KSxyPXV0KHIpO2JyZWFrO2Nhc2UganI6U2wocix0KTticmVha31yPXJbJF19Y29uc3Qgbj10Lmxlbmd0aC0xLHM9dFtuXTt0eXBlb2Ygcz09Im51bWJlciImJnM8MD90W25dKz1pcjp0LnB1c2goaXIpfSxibD0ocixlKT0+e2UucHVzaChxZSxyLm5hbWUpO2NvbnN0IHQ9cltrZV0udHJpbSgpO3QmJmUucHVzaCh0KX0sQ2w9KHIsZSk9Pntjb25zdCB0PXJba2VdO3QudHJpbSgpJiZlLnB1c2goci5ub2RlVHlwZSx0KX0sRmc9KHIsZSk9PntlLnB1c2goci5ub2RlVHlwZSksbWwocixlKX0sU2w9KHtuYW1lOnIscHVibGljSWQ6ZSxzeXN0ZW1JZDp0fSxuKT0+e24ucHVzaChqcixyKSxlJiZuLnB1c2goZSksdCYmbi5wdXNoKHQpfSxFbD0ocixlKT0+e2UucHVzaCh5ZSxyLmxvY2FsTmFtZSksbWwocixlKX0seWw9KHIsZSx0LG4scyxpLGEpPT4oe3R5cGU6cix0YXJnZXQ6ZSxhZGRlZE5vZGVzOm4scmVtb3ZlZE5vZGVzOnMsYXR0cmlidXRlTmFtZTppLG9sZFZhbHVlOmEscHJldmlvdXNTaWJsaW5nOnQ/LnByZXZpb3VzU2libGluZ3x8bnVsbCxuZXh0U2libGluZzp0Py5uZXh0U2libGluZ3x8bnVsbH0pLHZsPShyLGUsdCxuLHMsaSk9PntpZighbnx8bi5pbmNsdWRlcyh0KSl7Y29uc3R7Y2FsbGJhY2s6YSxyZWNvcmRzOm8sc2NoZWR1bGVkOnV9PXI7by5wdXNoKHlsKCJhdHRyaWJ1dGVzIixlLG51bGwsW10sW10sdCxzP2k6dm9pZCAwKSksdXx8KHIuc2NoZWR1bGVkPSEwLFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PntyLnNjaGVkdWxlZD0hMSxhKG8uc3BsaWNlKDApLHIpfSkpfX0sSGk9KHIsZSx0KT0+e2NvbnN0e293bmVyRG9jdW1lbnQ6bn09cix7YWN0aXZlOnMsb2JzZXJ2ZXJzOml9PW5bbnJdO2lmKHMpe2Zvcihjb25zdCBhIG9mIGkpZm9yKGNvbnN0W28se2NoaWxkTGlzdDp1LHN1YnRyZWU6bCxhdHRyaWJ1dGVzOkEsYXR0cmlidXRlRmlsdGVyOmQsYXR0cmlidXRlT2xkVmFsdWU6Z31db2YgYS5ub2RlcylpZih1KXtpZihsJiYobz09PW58fG8uY29udGFpbnMocikpfHwhbCYmby5jaGlsZHJlbi5pbmNsdWRlcyhyKSl7dmwoYSxyLGUsZCxnLHQpO2JyZWFrfX1lbHNlIGlmKEEmJm89PT1yKXt2bChhLHIsZSxkLGcsdCk7YnJlYWt9fX0sTm49KHIsZSk9Pntjb25zdHtvd25lckRvY3VtZW50OnR9PXIse2FjdGl2ZTpuLG9ic2VydmVyczpzfT10W25yXTtpZihuKXtmb3IoY29uc3QgaSBvZiBzKWZvcihjb25zdFthLHtzdWJ0cmVlOm8sY2hpbGRMaXN0OnUsY2hhcmFjdGVyRGF0YTpsfV1vZiBpLm5vZGVzKWlmKHUmJihlJiYoYT09PWV8fG8mJmEuY29udGFpbnMoZSkpfHwhZSYmKG8mJihhPT09dHx8YS5jb250YWlucyhyKSl8fCFvJiZhW2w/ImNoaWxkTm9kZXMiOiJjaGlsZHJlbiJdLmluY2x1ZGVzKHIpKSkpe2NvbnN0e2NhbGxiYWNrOkEscmVjb3JkczpkLHNjaGVkdWxlZDpnfT1pO2QucHVzaCh5bCgiY2hpbGRMaXN0IixhLHIsZT9bXTpbcl0sZT9bcl06W10pKSxnfHwoaS5zY2hlZHVsZWQ9ITAsUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e2kuc2NoZWR1bGVkPSExLEEoZC5zcGxpY2UoMCksaSl9KSk7YnJlYWt9fX07Y2xhc3MgTWd7Y29uc3RydWN0b3IoZSl7Y29uc3QgdD1uZXcgU2V0O3RoaXMub2JzZXJ2ZXJzPXQsdGhpcy5hY3RpdmU9ITEsdGhpcy5jbGFzcz1jbGFzc3tjb25zdHJ1Y3RvcihzKXt0aGlzLmNhbGxiYWNrPXMsdGhpcy5ub2Rlcz1uZXcgTWFwLHRoaXMucmVjb3Jkcz1bXSx0aGlzLnNjaGVkdWxlZD0hMX1kaXNjb25uZWN0KCl7dGhpcy5yZWNvcmRzLnNwbGljZSgwKSx0aGlzLm5vZGVzLmNsZWFyKCksdC5kZWxldGUodGhpcyksZVtucl0uYWN0aXZlPSEhdC5zaXplfW9ic2VydmUocyxpPXtzdWJ0cmVlOiExLGNoaWxkTGlzdDohMSxhdHRyaWJ1dGVzOiExLGF0dHJpYnV0ZUZpbHRlcjpudWxsLGF0dHJpYnV0ZU9sZFZhbHVlOiExLGNoYXJhY3RlckRhdGE6ITF9KXsoImF0dHJpYnV0ZU9sZFZhbHVlImluIGl8fCJhdHRyaWJ1dGVGaWx0ZXIiaW4gaSkmJihpLmF0dHJpYnV0ZXM9ITApLGkuY2hpbGRMaXN0PSEhaS5jaGlsZExpc3QsaS5zdWJ0cmVlPSEhaS5zdWJ0cmVlLHRoaXMubm9kZXMuc2V0KHMsaSksdC5hZGQodGhpcyksZVtucl0uYWN0aXZlPSEwfXRha2VSZWNvcmRzKCl7cmV0dXJuIHRoaXMucmVjb3Jkcy5zcGxpY2UoMCl9fX19Y29uc3QgT2c9bmV3IFNldChbImFsbG93ZnVsbHNjcmVlbiIsImFsbG93cGF5bWVudHJlcXVlc3QiLCJhc3luYyIsImF1dG9mb2N1cyIsImF1dG9wbGF5IiwiY2hlY2tlZCIsImNsYXNzIiwiY29udGVudGVkaXRhYmxlIiwiY29udHJvbHMiLCJkZWZhdWx0IiwiZGVmZXIiLCJkaXNhYmxlZCIsImRyYWdnYWJsZSIsImZvcm1ub3ZhbGlkYXRlIiwiaGlkZGVuIiwiaWQiLCJpc21hcCIsIml0ZW1zY29wZSIsImxvb3AiLCJtdWx0aXBsZSIsIm11dGVkIiwibm9tb2R1bGUiLCJub3ZhbGlkYXRlIiwib3BlbiIsInBsYXlzaW5saW5lIiwicmVhZG9ubHkiLCJyZXF1aXJlZCIsInJldmVyc2VkIiwic2VsZWN0ZWQiLCJzdHlsZSIsInRydWVzcGVlZCJdKSxRaT0ocixlKT0+e2NvbnN0e1trZV06dCxuYW1lOm59PWU7ZS5vd25lckVsZW1lbnQ9cix2cyhyLGUsclskXSksbj09PSJjbGFzcyImJihyLmNsYXNzTmFtZT10KSxIaShyLG4sbnVsbCksRHMocixuLG51bGwsdCl9LHdsPShyLGUpPT57Y29uc3R7W2tlXTp0LG5hbWU6bn09ZTtJdChlW1llXSxlWyRdKSxlLm93bmVyRWxlbWVudD1lW1llXT1lWyRdPW51bGwsbj09PSJjbGFzcyImJihyW1pyXT1udWxsKSxIaShyLG4sdCksRHMocixuLHQsbnVsbCl9LHZlPXtnZXQocixlKXtyZXR1cm4gci5oYXNBdHRyaWJ1dGUoZSl9LHNldChyLGUsdCl7dD9yLnNldEF0dHJpYnV0ZShlLCIiKTpyLnJlbW92ZUF0dHJpYnV0ZShlKX19LHVyPXtnZXQocixlKXtyZXR1cm4gcGFyc2VGbG9hdChyLmdldEF0dHJpYnV0ZShlKXx8MCl9LHNldChyLGUsdCl7ci5zZXRBdHRyaWJ1dGUoZSx0KX19LHo9e2dldChyLGUpe3JldHVybiByLmdldEF0dHJpYnV0ZShlKXx8IiJ9LHNldChyLGUsdCl7ci5zZXRBdHRyaWJ1dGUoZSx0KX19LE5zPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIExnKHIsZSl7cmV0dXJuIHR5cGVvZiBlPT0iZnVuY3Rpb24iP2UuY2FsbChyLnRhcmdldCxyKTplLmhhbmRsZUV2ZW50KHIpLHIuX3N0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbkZsYWd9ZnVuY3Rpb24gUGcoe2N1cnJlbnRUYXJnZXQ6cix0YXJnZXQ6ZX0pe2NvbnN0IHQ9TnMuZ2V0KHIpO2lmKHQmJnQuaGFzKHRoaXMudHlwZSkpe2NvbnN0IG49dC5nZXQodGhpcy50eXBlKTtyPT09ZT90aGlzLmV2ZW50UGhhc2U9dGhpcy5BVF9UQVJHRVQ6dGhpcy5ldmVudFBoYXNlPXRoaXMuQlVCQkxJTkdfUEhBU0UsdGhpcy5jdXJyZW50VGFyZ2V0PXIsdGhpcy50YXJnZXQ9ZTtmb3IoY29uc3RbcyxpXW9mIG4paWYoaSYmaS5vbmNlJiZuLmRlbGV0ZShzKSxMZyh0aGlzLHMpKWJyZWFrO3JldHVybiBkZWxldGUgdGhpcy5jdXJyZW50VGFyZ2V0LGRlbGV0ZSB0aGlzLnRhcmdldCx0aGlzLmNhbmNlbEJ1YmJsZX19Y2xhc3MgV2l7Y29uc3RydWN0b3IoKXtOcy5zZXQodGhpcyxuZXcgTWFwKX1fZ2V0UGFyZW50KCl7cmV0dXJuIG51bGx9YWRkRXZlbnRMaXN0ZW5lcihlLHQsbil7Y29uc3Qgcz1Ocy5nZXQodGhpcyk7cy5oYXMoZSl8fHMuc2V0KGUsbmV3IE1hcCkscy5nZXQoZSkuc2V0KHQsbil9cmVtb3ZlRXZlbnRMaXN0ZW5lcihlLHQpe2NvbnN0IG49TnMuZ2V0KHRoaXMpO2lmKG4uaGFzKGUpKXtjb25zdCBzPW4uZ2V0KGUpO3MuZGVsZXRlKHQpJiYhcy5zaXplJiZuLmRlbGV0ZShlKX19ZGlzcGF0Y2hFdmVudChlKXtsZXQgdD10aGlzO2ZvcihlLmV2ZW50UGhhc2U9ZS5DQVBUVVJJTkdfUEhBU0U7dDspdC5kaXNwYXRjaEV2ZW50JiZlLl9wYXRoLnB1c2goe2N1cnJlbnRUYXJnZXQ6dCx0YXJnZXQ6dGhpc30pLHQ9ZS5idWJibGVzJiZ0Ll9nZXRQYXJlbnQmJnQuX2dldFBhcmVudCgpO3JldHVybiBlLl9wYXRoLnNvbWUoUGcsZSksZS5fcGF0aD1bXSxlLmV2ZW50UGhhc2U9ZS5OT05FLCFlLmRlZmF1bHRQcmV2ZW50ZWR9fWNsYXNzIEZ0IGV4dGVuZHMgQXJyYXl7aXRlbShlKXtyZXR1cm4gZTx0aGlzLmxlbmd0aD90aGlzW2VdOm51bGx9fWNvbnN0IERsPSh7cGFyZW50Tm9kZTpyfSk9PntsZXQgZT0wO2Zvcig7cjspZSsrLHI9ci5wYXJlbnROb2RlO3JldHVybiBlfTtsZXQgRXI9Y2xhc3MgZXh0ZW5kcyBXaXtzdGF0aWMgZ2V0IEVMRU1FTlRfTk9ERSgpe3JldHVybiB5ZX1zdGF0aWMgZ2V0IEFUVFJJQlVURV9OT0RFKCl7cmV0dXJuIHFlfXN0YXRpYyBnZXQgVEVYVF9OT0RFKCl7cmV0dXJuIFhlfXN0YXRpYyBnZXQgQ0RBVEFfU0VDVElPTl9OT0RFKCl7cmV0dXJuIFJ0fXN0YXRpYyBnZXQgQ09NTUVOVF9OT0RFKCl7cmV0dXJuIEt0fXN0YXRpYyBnZXQgRE9DVU1FTlRfTk9ERSgpe3JldHVybiBtcn1zdGF0aWMgZ2V0IERPQ1VNRU5UX0ZSQUdNRU5UX05PREUoKXtyZXR1cm4gWXR9c3RhdGljIGdldCBET0NVTUVOVF9UWVBFX05PREUoKXtyZXR1cm4ganJ9Y29uc3RydWN0b3IoZSx0LG4pe3N1cGVyKCksdGhpcy5vd25lckRvY3VtZW50PWUsdGhpcy5sb2NhbE5hbWU9dCx0aGlzLm5vZGVUeXBlPW4sdGhpcy5wYXJlbnROb2RlPW51bGwsdGhpc1skXT1udWxsLHRoaXNbWWVdPW51bGx9Z2V0IEVMRU1FTlRfTk9ERSgpe3JldHVybiB5ZX1nZXQgQVRUUklCVVRFX05PREUoKXtyZXR1cm4gcWV9Z2V0IFRFWFRfTk9ERSgpe3JldHVybiBYZX1nZXQgQ0RBVEFfU0VDVElPTl9OT0RFKCl7cmV0dXJuIFJ0fWdldCBDT01NRU5UX05PREUoKXtyZXR1cm4gS3R9Z2V0IERPQ1VNRU5UX05PREUoKXtyZXR1cm4gbXJ9Z2V0IERPQ1VNRU5UX0ZSQUdNRU5UX05PREUoKXtyZXR1cm4gWXR9Z2V0IERPQ1VNRU5UX1RZUEVfTk9ERSgpe3JldHVybiBqcn1nZXQgYmFzZVVSSSgpe2NvbnN0IGU9dGhpcy5ub2RlVHlwZT09PW1yP3RoaXM6dGhpcy5vd25lckRvY3VtZW50O2lmKGUpe2NvbnN0IHQ9ZS5xdWVyeVNlbGVjdG9yKCJiYXNlIik7aWYodClyZXR1cm4gdC5nZXRBdHRyaWJ1dGUoImhyZWYiKTtjb25zdHtsb2NhdGlvbjpufT1lLmRlZmF1bHRWaWV3O2lmKG4pcmV0dXJuIG4uaHJlZn1yZXR1cm4gbnVsbH1nZXQgaXNDb25uZWN0ZWQoKXtyZXR1cm4hMX1nZXQgbm9kZU5hbWUoKXtyZXR1cm4gdGhpcy5sb2NhbE5hbWV9Z2V0IHBhcmVudEVsZW1lbnQoKXtyZXR1cm4gbnVsbH1nZXQgcHJldmlvdXNTaWJsaW5nKCl7cmV0dXJuIG51bGx9Z2V0IHByZXZpb3VzRWxlbWVudFNpYmxpbmcoKXtyZXR1cm4gbnVsbH1nZXQgbmV4dFNpYmxpbmcoKXtyZXR1cm4gbnVsbH1nZXQgbmV4dEVsZW1lbnRTaWJsaW5nKCl7cmV0dXJuIG51bGx9Z2V0IGNoaWxkTm9kZXMoKXtyZXR1cm4gbmV3IEZ0fWdldCBmaXJzdENoaWxkKCl7cmV0dXJuIG51bGx9Z2V0IGxhc3RDaGlsZCgpe3JldHVybiBudWxsfWdldCBub2RlVmFsdWUoKXtyZXR1cm4gbnVsbH1zZXQgbm9kZVZhbHVlKGUpe31nZXQgdGV4dENvbnRlbnQoKXtyZXR1cm4gbnVsbH1zZXQgdGV4dENvbnRlbnQoZSl7fW5vcm1hbGl6ZSgpe31jbG9uZU5vZGUoKXtyZXR1cm4gbnVsbH1jb250YWlucygpe3JldHVybiExfWluc2VydEJlZm9yZShlLHQpe3JldHVybiBlfWFwcGVuZENoaWxkKGUpe3JldHVybiBlfXJlcGxhY2VDaGlsZChlLHQpe3JldHVybiB0fXJlbW92ZUNoaWxkKGUpe3JldHVybiBlfXRvU3RyaW5nKCl7cmV0dXJuIiJ9aGFzQ2hpbGROb2Rlcygpe3JldHVybiEhdGhpcy5sYXN0Q2hpbGR9aXNTYW1lTm9kZShlKXtyZXR1cm4gdGhpcz09PWV9Y29tcGFyZURvY3VtZW50UG9zaXRpb24oZSl7bGV0IHQ9MDtpZih0aGlzIT09ZSl7bGV0IG49RGwodGhpcykscz1EbChlKTtpZihuPHMpdCs9dWwsdGhpcy5jb250YWlucyhlKSYmKHQrPXZnKTtlbHNlIGlmKHM8bil0Kz1vbCxlLmNvbnRhaW5zKHRoaXMpJiYodCs9eWcpO2Vsc2UgaWYobiYmcyl7Y29uc3R7Y2hpbGROb2RlczppfT10aGlzLnBhcmVudE5vZGU7aS5pbmRleE9mKHRoaXMpPGkuaW5kZXhPZihlKT90Kz11bDp0Kz1vbH0oIW58fCFzKSYmKHQrPXdnLHQrPUVnKX1yZXR1cm4gdH1pc0VxdWFsTm9kZShlKXtpZih0aGlzPT09ZSlyZXR1cm4hMDtpZih0aGlzLm5vZGVUeXBlPT09ZS5ub2RlVHlwZSl7c3dpdGNoKHRoaXMubm9kZVR5cGUpe2Nhc2UgbXI6Y2FzZSBZdDp7Y29uc3QgdD10aGlzLmNoaWxkTm9kZXMsbj1lLmNoaWxkTm9kZXM7cmV0dXJuIHQubGVuZ3RoPT09bi5sZW5ndGgmJnQuZXZlcnkoKHMsaSk9PnMuaXNFcXVhbE5vZGUobltpXSkpfX1yZXR1cm4gdGhpcy50b1N0cmluZygpPT09ZS50b1N0cmluZygpfXJldHVybiExfV9nZXRQYXJlbnQoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlfWdldFJvb3ROb2RlKCl7bGV0IGU9dGhpcztmb3IoO2UucGFyZW50Tm9kZTspZT1lLnBhcmVudE5vZGU7cmV0dXJuIGV9fTtjb25zdHtyZXBsYWNlOlVnfT0iIixHZz0vWzw+Jlx4QTBdL2csSGc9eyLCoCI6IiYjMTYwOyIsIiYiOiImYW1wOyIsIjwiOiImbHQ7IiwiPiI6IiZndDsifSxRZz1yPT5IZ1tyXSxLaT1yPT5VZy5jYWxsKHIsR2csUWcpLFdnPS8iL2c7bGV0IGtuPWNsYXNzIGtoIGV4dGVuZHMgRXJ7Y29uc3RydWN0b3IoZSx0LG49IiIpe3N1cGVyKGUsdCxxZSksdGhpcy5vd25lckVsZW1lbnQ9bnVsbCx0aGlzLm5hbWU9YnIodCksdGhpc1trZV09YnIobiksdGhpc1toc109ITF9Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXNba2VdfXNldCB2YWx1ZShlKXtjb25zdHtba2VdOnQsbmFtZTpuLG93bmVyRWxlbWVudDpzfT10aGlzO3RoaXNba2VdPWJyKGUpLHRoaXNbaHNdPSEwLHMmJihIaShzLG4sdCksRHMocyxuLHQsdGhpc1trZV0pKX1jbG9uZU5vZGUoKXtjb25zdHtvd25lckRvY3VtZW50OmUsbmFtZTp0LFtrZV06bn09dGhpcztyZXR1cm4gbmV3IGtoKGUsdCxuKX10b1N0cmluZygpe2NvbnN0e25hbWU6ZSxba2VdOnR9PXRoaXM7aWYoT2cuaGFzKGUpJiYhdClyZXR1cm4gYXIodGhpcyk/ZTpgJHtlfT0iImA7Y29uc3Qgbj0oYXIodGhpcyk/dDpLaSh0KSkucmVwbGFjZShXZywiJnF1b3Q7Iik7cmV0dXJuYCR7ZX09IiR7bn0iYH10b0pTT04oKXtjb25zdCBlPVtdO3JldHVybiBibCh0aGlzLGUpLGV9fTtjb25zdCBJbD0oe293bmVyRG9jdW1lbnQ6cixwYXJlbnROb2RlOmV9KT0+e2Zvcig7ZTspe2lmKGU9PT1yKXJldHVybiEwO2U9ZS5wYXJlbnROb2RlfHxlLmhvc3R9cmV0dXJuITF9LE5sPSh7cGFyZW50Tm9kZTpyfSk9PntpZihyKXN3aXRjaChyLm5vZGVUeXBlKXtjYXNlIG1yOmNhc2UgWXQ6cmV0dXJuIG51bGx9cmV0dXJuIHJ9LHhuPSh7W1llXTpyfSk9Pntzd2l0Y2gocj9yLm5vZGVUeXBlOjApe2Nhc2UgaXI6cmV0dXJuIHJbYXRdO2Nhc2UgWGU6Y2FzZSBLdDpjYXNlIFJ0OnJldHVybiByfXJldHVybiBudWxsfSx5cj1yPT57Y29uc3QgZT11dChyKVskXTtyZXR1cm4gZSYmKGUubm9kZVR5cGU9PT1pcj9udWxsOmUpfSxZaT1yPT57bGV0IGU9eXIocik7Zm9yKDtlJiZlLm5vZGVUeXBlIT09eWU7KWU9eXIoZSk7cmV0dXJuIGV9LGtsPXI9PntsZXQgZT14bihyKTtmb3IoO2UmJmUubm9kZVR5cGUhPT15ZTspZT14bihlKTtyZXR1cm4gZX0sWmk9KHIsZSk9Pntjb25zdCB0PXIuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO3JldHVybiB0LmFwcGVuZCguLi5lKSx0fSx4bD0ocixlKT0+e2NvbnN0e293bmVyRG9jdW1lbnQ6dCxwYXJlbnROb2RlOm59PXI7biYmbi5pbnNlcnRCZWZvcmUoWmkodCxlKSxyKX0sVGw9KHIsZSk9Pntjb25zdHtvd25lckRvY3VtZW50OnQscGFyZW50Tm9kZTpufT1yO24mJm4uaW5zZXJ0QmVmb3JlKFppKHQsZSksdXQocilbJF0pfSxWaT0ocixlKT0+e2NvbnN0e293bmVyRG9jdW1lbnQ6dCxwYXJlbnROb2RlOm59PXI7biYmKGUuaW5jbHVkZXMocikmJlZpKHIsW3I9ci5jbG9uZU5vZGUoKV0pLG4uaW5zZXJ0QmVmb3JlKFppKHQsZSksciksci5yZW1vdmUoKSl9LEJsPShyLGUsdCk9Pntjb25zdHtwYXJlbnROb2RlOm4sbm9kZVR5cGU6c309ZTsocnx8dCkmJihobChyLHQpLGVbWWVdPW51bGwsdXQoZSlbJF09bnVsbCksbiYmKGUucGFyZW50Tm9kZT1udWxsLE5uKGUsbikscz09PXllJiZUZyhlKSl9O2xldCBUbj1jbGFzcyBleHRlbmRzIEVye2NvbnN0cnVjdG9yKGUsdCxuLHMpe3N1cGVyKGUsdCxuKSx0aGlzW2tlXT1icihzKX1nZXQgaXNDb25uZWN0ZWQoKXtyZXR1cm4gSWwodGhpcyl9Z2V0IHBhcmVudEVsZW1lbnQoKXtyZXR1cm4gTmwodGhpcyl9Z2V0IHByZXZpb3VzU2libGluZygpe3JldHVybiB4bih0aGlzKX1nZXQgbmV4dFNpYmxpbmcoKXtyZXR1cm4geXIodGhpcyl9Z2V0IHByZXZpb3VzRWxlbWVudFNpYmxpbmcoKXtyZXR1cm4ga2wodGhpcyl9Z2V0IG5leHRFbGVtZW50U2libGluZygpe3JldHVybiBZaSh0aGlzKX1iZWZvcmUoLi4uZSl7eGwodGhpcyxlKX1hZnRlciguLi5lKXtUbCh0aGlzLGUpfXJlcGxhY2VXaXRoKC4uLmUpe1ZpKHRoaXMsZSl9cmVtb3ZlKCl7QmwodGhpc1tZZV0sdGhpcyx0aGlzWyRdKX1nZXQgZGF0YSgpe3JldHVybiB0aGlzW2tlXX1zZXQgZGF0YShlKXt0aGlzW2tlXT1icihlKSxObih0aGlzLHRoaXMucGFyZW50Tm9kZSl9Z2V0IG5vZGVWYWx1ZSgpe3JldHVybiB0aGlzLmRhdGF9c2V0IG5vZGVWYWx1ZShlKXt0aGlzLmRhdGE9ZX1nZXQgdGV4dENvbnRlbnQoKXtyZXR1cm4gdGhpcy5kYXRhfXNldCB0ZXh0Q29udGVudChlKXt0aGlzLmRhdGE9ZX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuZGF0YS5sZW5ndGh9c3Vic3RyaW5nRGF0YShlLHQpe3JldHVybiB0aGlzLmRhdGEuc3Vic3RyKGUsdCl9YXBwZW5kRGF0YShlKXt0aGlzLmRhdGErPWV9aW5zZXJ0RGF0YShlLHQpe2NvbnN0e2RhdGE6bn09dGhpczt0aGlzLmRhdGE9bi5zbGljZSgwLGUpK3Qrbi5zbGljZShlKX1kZWxldGVEYXRhKGUsdCl7Y29uc3R7ZGF0YTpufT10aGlzO3RoaXMuZGF0YT1uLnNsaWNlKDAsZSkrbi5zbGljZShlK3QpfXJlcGxhY2VEYXRhKGUsdCxuKXtjb25zdHtkYXRhOnN9PXRoaXM7dGhpcy5kYXRhPXMuc2xpY2UoMCxlKStuK3Muc2xpY2UoZSt0KX10b0pTT04oKXtjb25zdCBlPVtdO3JldHVybiBDbCh0aGlzLGUpLGV9fSx6aT1jbGFzcyB4aCBleHRlbmRzIFRue2NvbnN0cnVjdG9yKGUsdD0iIil7c3VwZXIoZSwiI2NkYXRhc2VjdGlvbiIsUnQsdCl9Y2xvbmVOb2RlKCl7Y29uc3R7b3duZXJEb2N1bWVudDplLFtrZV06dH09dGhpcztyZXR1cm4gbmV3IHhoKGUsdCl9dG9TdHJpbmcoKXtyZXR1cm5gPCFbQ0RBVEFbJHt0aGlzW2tlXX1dXT5gfX0sSmk9Y2xhc3MgVGggZXh0ZW5kcyBUbntjb25zdHJ1Y3RvcihlLHQ9IiIpe3N1cGVyKGUsIiNjb21tZW50IixLdCx0KX1jbG9uZU5vZGUoKXtjb25zdHtvd25lckRvY3VtZW50OmUsW2tlXTp0fT10aGlzO3JldHVybiBuZXcgVGgoZSx0KX10b1N0cmluZygpe3JldHVybmA8IS0tJHt0aGlzW2tlXX0tLT5gfX07ZnVuY3Rpb24gQXQocil7cmV0dXJuIGtpKHIpfWZ1bmN0aW9uIHFpKHIpe3JldHVybiByLnR5cGU9PT1iZS5DREFUQX1mdW5jdGlvbiAkcihyKXtyZXR1cm4gci50eXBlPT09YmUuVGV4dH1mdW5jdGlvbiBfbChyKXtyZXR1cm4gci50eXBlPT09YmUuQ29tbWVudH1mdW5jdGlvbiBLZyhyKXtyZXR1cm4gci50eXBlPT09YmUuUm9vdH1mdW5jdGlvbiBscihyKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsImNoaWxkcmVuIil9ZnVuY3Rpb24gUmwocixlKXtyZXR1cm4gbXMocixlKX1mdW5jdGlvbiBZZyhyLGUpe3JldHVybiBscihyKT9yLmNoaWxkcmVuLm1hcCh0PT5SbCh0LGUpKS5qb2luKCIiKToiIn1mdW5jdGlvbiBrcyhyKXtyZXR1cm4gQXJyYXkuaXNBcnJheShyKT9yLm1hcChrcykuam9pbigiIik6QXQocik/ci5uYW1lPT09ImJyIj9gCmA6a3Moci5jaGlsZHJlbik6cWkocik/a3Moci5jaGlsZHJlbik6JHIocik/ci5kYXRhOiIifWZ1bmN0aW9uIHhzKHIpe3JldHVybiBBcnJheS5pc0FycmF5KHIpP3IubWFwKHhzKS5qb2luKCIiKTpscihyKSYmIV9sKHIpP3hzKHIuY2hpbGRyZW4pOiRyKHIpP3IuZGF0YToiIn1mdW5jdGlvbiBqaShyKXtyZXR1cm4gQXJyYXkuaXNBcnJheShyKT9yLm1hcChqaSkuam9pbigiIik6bHIocikmJihyLnR5cGU9PT1iZS5UYWd8fHFpKHIpKT9qaShyLmNoaWxkcmVuKTokcihyKT9yLmRhdGE6IiJ9ZnVuY3Rpb24gRmwocil7cmV0dXJuIGxyKHIpP3IuY2hpbGRyZW46W119ZnVuY3Rpb24gTWwocil7cmV0dXJuIHIucGFyZW50fHxudWxsfWZ1bmN0aW9uIFpnKHIpe2NvbnN0IGU9TWwocik7aWYoZSE9bnVsbClyZXR1cm4gRmwoZSk7Y29uc3QgdD1bcl07bGV0e3ByZXY6bixuZXh0OnN9PXI7Zm9yKDtuIT1udWxsOyl0LnVuc2hpZnQobikse3ByZXY6bn09bjtmb3IoO3MhPW51bGw7KXQucHVzaChzKSx7bmV4dDpzfT1zO3JldHVybiB0fWZ1bmN0aW9uIFZnKHIsZSl7dmFyIHQ7cmV0dXJuKHQ9ci5hdHRyaWJzKT09PW51bGx8fHQ9PT12b2lkIDA/dm9pZCAwOnRbZV19ZnVuY3Rpb24gemcocixlKXtyZXR1cm4gci5hdHRyaWJzIT1udWxsJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoci5hdHRyaWJzLGUpJiZyLmF0dHJpYnNbZV0hPW51bGx9ZnVuY3Rpb24gSmcocil7cmV0dXJuIHIubmFtZX1mdW5jdGlvbiBxZyhyKXtsZXR7bmV4dDplfT1yO2Zvcig7ZSE9PW51bGwmJiFBdChlKTspKHtuZXh0OmV9PWUpO3JldHVybiBlfWZ1bmN0aW9uIGpnKHIpe2xldHtwcmV2OmV9PXI7Zm9yKDtlIT09bnVsbCYmIUF0KGUpOykoe3ByZXY6ZX09ZSk7cmV0dXJuIGV9ZnVuY3Rpb24gQm4ocil7aWYoci5wcmV2JiYoci5wcmV2Lm5leHQ9ci5uZXh0KSxyLm5leHQmJihyLm5leHQucHJldj1yLnByZXYpLHIucGFyZW50KXtjb25zdCBlPXIucGFyZW50LmNoaWxkcmVuO2Uuc3BsaWNlKGUubGFzdEluZGV4T2YociksMSl9fWZ1bmN0aW9uIFhnKHIsZSl7Y29uc3QgdD1lLnByZXY9ci5wcmV2O3QmJih0Lm5leHQ9ZSk7Y29uc3Qgbj1lLm5leHQ9ci5uZXh0O24mJihuLnByZXY9ZSk7Y29uc3Qgcz1lLnBhcmVudD1yLnBhcmVudDtpZihzKXtjb25zdCBpPXMuY2hpbGRyZW47aVtpLmxhc3RJbmRleE9mKHIpXT1lLHIucGFyZW50PW51bGx9fWZ1bmN0aW9uICRnKHIsZSl7aWYoQm4oZSksZS5uZXh0PW51bGwsZS5wYXJlbnQ9cixyLmNoaWxkcmVuLnB1c2goZSk+MSl7Y29uc3QgdD1yLmNoaWxkcmVuW3IuY2hpbGRyZW4ubGVuZ3RoLTJdO3QubmV4dD1lLGUucHJldj10fWVsc2UgZS5wcmV2PW51bGx9ZnVuY3Rpb24gZW0ocixlKXtCbihlKTtjb25zdHtwYXJlbnQ6dH09cixuPXIubmV4dDtpZihlLm5leHQ9bixlLnByZXY9cixyLm5leHQ9ZSxlLnBhcmVudD10LG4pe2lmKG4ucHJldj1lLHQpe2NvbnN0IHM9dC5jaGlsZHJlbjtzLnNwbGljZShzLmxhc3RJbmRleE9mKG4pLDAsZSl9fWVsc2UgdCYmdC5jaGlsZHJlbi5wdXNoKGUpfWZ1bmN0aW9uIHRtKHIsZSl7aWYoQm4oZSksZS5wYXJlbnQ9cixlLnByZXY9bnVsbCxyLmNoaWxkcmVuLnVuc2hpZnQoZSkhPT0xKXtjb25zdCB0PXIuY2hpbGRyZW5bMV07dC5wcmV2PWUsZS5uZXh0PXR9ZWxzZSBlLm5leHQ9bnVsbH1mdW5jdGlvbiBybShyLGUpe0JuKGUpO2NvbnN0e3BhcmVudDp0fT1yO2lmKHQpe2NvbnN0IG49dC5jaGlsZHJlbjtuLnNwbGljZShuLmluZGV4T2YociksMCxlKX1yLnByZXYmJihyLnByZXYubmV4dD1lKSxlLnBhcmVudD10LGUucHJldj1yLnByZXYsZS5uZXh0PXIsci5wcmV2PWV9ZnVuY3Rpb24gVHMocixlLHQ9ITAsbj0xLzApe3JldHVybiBBcnJheS5pc0FycmF5KGUpfHwoZT1bZV0pLFhpKHIsZSx0LG4pfWZ1bmN0aW9uIFhpKHIsZSx0LG4pe2NvbnN0IHM9W107Zm9yKGNvbnN0IGkgb2YgZSl7aWYocihpKSYmKHMucHVzaChpKSwtLW48PTApKWJyZWFrO2lmKHQmJmxyKGkpJiZpLmNoaWxkcmVuLmxlbmd0aD4wKXtjb25zdCBhPVhpKHIsaS5jaGlsZHJlbix0LG4pO2lmKHMucHVzaCguLi5hKSxuLT1hLmxlbmd0aCxuPD0wKWJyZWFrfX1yZXR1cm4gc31mdW5jdGlvbiBubShyLGUpe3JldHVybiBlLmZpbmQocil9ZnVuY3Rpb24gJGkocixlLHQ9ITApe2xldCBuPW51bGw7Zm9yKGxldCBzPTA7czxlLmxlbmd0aCYmIW47cysrKXtjb25zdCBpPWVbc107aWYoQXQoaSkpcihpKT9uPWk6dCYmaS5jaGlsZHJlbi5sZW5ndGg+MCYmKG49JGkocixpLmNoaWxkcmVuLCEwKSk7ZWxzZSBjb250aW51ZX1yZXR1cm4gbn1mdW5jdGlvbiBPbChyLGUpe3JldHVybiBlLnNvbWUodD0+QXQodCkmJihyKHQpfHx0LmNoaWxkcmVuLmxlbmd0aD4wJiZPbChyLHQuY2hpbGRyZW4pKSl9ZnVuY3Rpb24gc20ocixlKXt2YXIgdDtjb25zdCBuPVtdLHM9ZS5maWx0ZXIoQXQpO2xldCBpO2Zvcig7aT1zLnNoaWZ0KCk7KXtjb25zdCBhPSh0PWkuY2hpbGRyZW4pPT09bnVsbHx8dD09PXZvaWQgMD92b2lkIDA6dC5maWx0ZXIoQXQpO2EmJmEubGVuZ3RoPjAmJnMudW5zaGlmdCguLi5hKSxyKGkpJiZuLnB1c2goaSl9cmV0dXJuIG59Y29uc3QgQnM9e3RhZ19uYW1lKHIpe3JldHVybiB0eXBlb2Ygcj09ImZ1bmN0aW9uIj9lPT5BdChlKSYmcihlLm5hbWUpOnI9PT0iKiI/QXQ6ZT0+QXQoZSkmJmUubmFtZT09PXJ9LHRhZ190eXBlKHIpe3JldHVybiB0eXBlb2Ygcj09ImZ1bmN0aW9uIj9lPT5yKGUudHlwZSk6ZT0+ZS50eXBlPT09cn0sdGFnX2NvbnRhaW5zKHIpe3JldHVybiB0eXBlb2Ygcj09ImZ1bmN0aW9uIj9lPT4kcihlKSYmcihlLmRhdGEpOmU9PiRyKGUpJiZlLmRhdGE9PT1yfX07ZnVuY3Rpb24gTGwocixlKXtyZXR1cm4gdHlwZW9mIGU9PSJmdW5jdGlvbiI/dD0+QXQodCkmJmUodC5hdHRyaWJzW3JdKTp0PT5BdCh0KSYmdC5hdHRyaWJzW3JdPT09ZX1mdW5jdGlvbiBpbShyLGUpe3JldHVybiB0PT5yKHQpfHxlKHQpfWZ1bmN0aW9uIFBsKHIpe2NvbnN0IGU9T2JqZWN0LmtleXMocikubWFwKHQ9Pntjb25zdCBuPXJbdF07cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChCcyx0KT9Cc1t0XShuKTpMbCh0LG4pfSk7cmV0dXJuIGUubGVuZ3RoPT09MD9udWxsOmUucmVkdWNlKGltKX1mdW5jdGlvbiBhbShyLGUpe2NvbnN0IHQ9UGwocik7cmV0dXJuIHQ/dChlKTohMH1mdW5jdGlvbiBvbShyLGUsdCxuPTEvMCl7Y29uc3Qgcz1QbChyKTtyZXR1cm4gcz9UcyhzLGUsdCxuKTpbXX1mdW5jdGlvbiB1bShyLGUsdD0hMCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSl8fChlPVtlXSksJGkoTGwoImlkIixyKSxlLHQpfWZ1bmN0aW9uIGVuKHIsZSx0PSEwLG49MS8wKXtyZXR1cm4gVHMoQnMudGFnX25hbWUociksZSx0LG4pfWZ1bmN0aW9uIGxtKHIsZSx0PSEwLG49MS8wKXtyZXR1cm4gVHMoQnMudGFnX3R5cGUociksZSx0LG4pfWZ1bmN0aW9uIGNtKHIpe2xldCBlPXIubGVuZ3RoO2Zvcig7LS1lPj0wOyl7Y29uc3QgdD1yW2VdO2lmKGU+MCYmci5sYXN0SW5kZXhPZih0LGUtMSk+PTApe3Iuc3BsaWNlKGUsMSk7Y29udGludWV9Zm9yKGxldCBuPXQucGFyZW50O247bj1uLnBhcmVudClpZihyLmluY2x1ZGVzKG4pKXtyLnNwbGljZShlLDEpO2JyZWFrfX1yZXR1cm4gcn12YXIgU3Q7KGZ1bmN0aW9uKHIpe3Jbci5ESVNDT05ORUNURUQ9MV09IkRJU0NPTk5FQ1RFRCIscltyLlBSRUNFRElORz0yXT0iUFJFQ0VESU5HIixyW3IuRk9MTE9XSU5HPTRdPSJGT0xMT1dJTkciLHJbci5DT05UQUlOUz04XT0iQ09OVEFJTlMiLHJbci5DT05UQUlORURfQlk9MTZdPSJDT05UQUlORURfQlkifSkoU3R8fChTdD17fSkpO2Z1bmN0aW9uIFVsKHIsZSl7Y29uc3QgdD1bXSxuPVtdO2lmKHI9PT1lKXJldHVybiAwO2xldCBzPWxyKHIpP3I6ci5wYXJlbnQ7Zm9yKDtzOyl0LnVuc2hpZnQocykscz1zLnBhcmVudDtmb3Iocz1scihlKT9lOmUucGFyZW50O3M7KW4udW5zaGlmdChzKSxzPXMucGFyZW50O2NvbnN0IGk9TWF0aC5taW4odC5sZW5ndGgsbi5sZW5ndGgpO2xldCBhPTA7Zm9yKDthPGkmJnRbYV09PT1uW2FdOylhKys7aWYoYT09PTApcmV0dXJuIFN0LkRJU0NPTk5FQ1RFRDtjb25zdCBvPXRbYS0xXSx1PW8uY2hpbGRyZW4sbD10W2FdLEE9blthXTtyZXR1cm4gdS5pbmRleE9mKGwpPnUuaW5kZXhPZihBKT9vPT09ZT9TdC5GT0xMT1dJTkd8U3QuQ09OVEFJTkVEX0JZOlN0LkZPTExPV0lORzpvPT09cj9TdC5QUkVDRURJTkd8U3QuQ09OVEFJTlM6U3QuUFJFQ0VESU5HfWZ1bmN0aW9uIGhtKHIpe3JldHVybiByPXIuZmlsdGVyKChlLHQsbik9PiFuLmluY2x1ZGVzKGUsdCsxKSksci5zb3J0KChlLHQpPT57Y29uc3Qgbj1VbChlLHQpO3JldHVybiBuJlN0LlBSRUNFRElORz8tMTpuJlN0LkZPTExPV0lORz8xOjB9KSxyfWZ1bmN0aW9uIEFtKHIpe2NvbnN0IGU9X3MobW0scik7cmV0dXJuIGU/ZS5uYW1lPT09ImZlZWQiP2RtKGUpOmZtKGUpOm51bGx9ZnVuY3Rpb24gZG0ocil7dmFyIGU7Y29uc3QgdD1yLmNoaWxkcmVuLG49e3R5cGU6ImF0b20iLGl0ZW1zOmVuKCJlbnRyeSIsdCkubWFwKGE9Pnt2YXIgbztjb25zdHtjaGlsZHJlbjp1fT1hLGw9e21lZGlhOkdsKHUpfTtsdChsLCJpZCIsImlkIix1KSxsdChsLCJ0aXRsZSIsInRpdGxlIix1KTtjb25zdCBBPShvPV9zKCJsaW5rIix1KSk9PT1udWxsfHxvPT09dm9pZCAwP3ZvaWQgMDpvLmF0dHJpYnMuaHJlZjtBJiYobC5saW5rPUEpO2NvbnN0IGQ9dnIoInN1bW1hcnkiLHUpfHx2cigiY29udGVudCIsdSk7ZCYmKGwuZGVzY3JpcHRpb249ZCk7Y29uc3QgZz12cigidXBkYXRlZCIsdSk7cmV0dXJuIGcmJihsLnB1YkRhdGU9bmV3IERhdGUoZykpLGx9KX07bHQobiwiaWQiLCJpZCIsdCksbHQobiwidGl0bGUiLCJ0aXRsZSIsdCk7Y29uc3Qgcz0oZT1fcygibGluayIsdCkpPT09bnVsbHx8ZT09PXZvaWQgMD92b2lkIDA6ZS5hdHRyaWJzLmhyZWY7cyYmKG4ubGluaz1zKSxsdChuLCJkZXNjcmlwdGlvbiIsInN1YnRpdGxlIix0KTtjb25zdCBpPXZyKCJ1cGRhdGVkIix0KTtyZXR1cm4gaSYmKG4udXBkYXRlZD1uZXcgRGF0ZShpKSksbHQobiwiYXV0aG9yIiwiZW1haWwiLHQsITApLG59ZnVuY3Rpb24gZm0ocil7dmFyIGUsdDtjb25zdCBuPSh0PShlPV9zKCJjaGFubmVsIixyLmNoaWxkcmVuKSk9PT1udWxsfHxlPT09dm9pZCAwP3ZvaWQgMDplLmNoaWxkcmVuKSE9PW51bGwmJnQhPT12b2lkIDA/dDpbXSxzPXt0eXBlOnIubmFtZS5zdWJzdHIoMCwzKSxpZDoiIixpdGVtczplbigiaXRlbSIsci5jaGlsZHJlbikubWFwKGE9Pntjb25zdHtjaGlsZHJlbjpvfT1hLHU9e21lZGlhOkdsKG8pfTtsdCh1LCJpZCIsImd1aWQiLG8pLGx0KHUsInRpdGxlIiwidGl0bGUiLG8pLGx0KHUsImxpbmsiLCJsaW5rIixvKSxsdCh1LCJkZXNjcmlwdGlvbiIsImRlc2NyaXB0aW9uIixvKTtjb25zdCBsPXZyKCJwdWJEYXRlIixvKTtyZXR1cm4gbCYmKHUucHViRGF0ZT1uZXcgRGF0ZShsKSksdX0pfTtsdChzLCJ0aXRsZSIsInRpdGxlIixuKSxsdChzLCJsaW5rIiwibGluayIsbiksbHQocywiZGVzY3JpcHRpb24iLCJkZXNjcmlwdGlvbiIsbik7Y29uc3QgaT12cigibGFzdEJ1aWxkRGF0ZSIsbik7cmV0dXJuIGkmJihzLnVwZGF0ZWQ9bmV3IERhdGUoaSkpLGx0KHMsImF1dGhvciIsIm1hbmFnaW5nRWRpdG9yIixuLCEwKSxzfWNvbnN0IHBtPVsidXJsIiwidHlwZSIsImxhbmciXSxnbT1bImZpbGVTaXplIiwiYml0cmF0ZSIsImZyYW1lcmF0ZSIsInNhbXBsaW5ncmF0ZSIsImNoYW5uZWxzIiwiZHVyYXRpb24iLCJoZWlnaHQiLCJ3aWR0aCJdO2Z1bmN0aW9uIEdsKHIpe3JldHVybiBlbigibWVkaWE6Y29udGVudCIscikubWFwKGU9Pntjb25zdHthdHRyaWJzOnR9PWUsbj17bWVkaXVtOnQubWVkaXVtLGlzRGVmYXVsdDohIXQuaXNEZWZhdWx0fTtmb3IoY29uc3QgcyBvZiBwbSl0W3NdJiYobltzXT10W3NdKTtmb3IoY29uc3QgcyBvZiBnbSl0W3NdJiYobltzXT1wYXJzZUludCh0W3NdLDEwKSk7cmV0dXJuIHQuZXhwcmVzc2lvbiYmKG4uZXhwcmVzc2lvbj10LmV4cHJlc3Npb24pLG59KX1mdW5jdGlvbiBfcyhyLGUpe3JldHVybiBlbihyLGUsITAsMSlbMF19ZnVuY3Rpb24gdnIocixlLHQ9ITEpe3JldHVybiB4cyhlbihyLGUsdCwxKSkudHJpbSgpfWZ1bmN0aW9uIGx0KHIsZSx0LG4scz0hMSl7Y29uc3QgaT12cih0LG4scyk7aSYmKHJbZV09aSl9ZnVuY3Rpb24gbW0ocil7cmV0dXJuIHI9PT0icnNzInx8cj09PSJmZWVkInx8cj09PSJyZGY6UkRGIn12YXIgSGw9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsZ2V0IERvY3VtZW50UG9zaXRpb24oKXtyZXR1cm4gU3R9LGFwcGVuZDplbSxhcHBlbmRDaGlsZDokZyxjb21wYXJlRG9jdW1lbnRQb3NpdGlvbjpVbCxleGlzdHNPbmU6T2wsZmlsdGVyOlRzLGZpbmQ6WGksZmluZEFsbDpzbSxmaW5kT25lOiRpLGZpbmRPbmVDaGlsZDpubSxnZXRBdHRyaWJ1dGVWYWx1ZTpWZyxnZXRDaGlsZHJlbjpGbCxnZXRFbGVtZW50QnlJZDp1bSxnZXRFbGVtZW50czpvbSxnZXRFbGVtZW50c0J5VGFnTmFtZTplbixnZXRFbGVtZW50c0J5VGFnVHlwZTpsbSxnZXRGZWVkOkFtLGdldElubmVySFRNTDpZZyxnZXROYW1lOkpnLGdldE91dGVySFRNTDpSbCxnZXRQYXJlbnQ6TWwsZ2V0U2libGluZ3M6WmcsZ2V0VGV4dDprcyxoYXNBdHRyaWI6emcsaGFzQ2hpbGRyZW46bHIsaW5uZXJUZXh0OmppLGlzQ0RBVEE6cWksaXNDb21tZW50Ol9sLGlzRG9jdW1lbnQ6S2csaXNUYWc6QXQsaXNUZXh0OiRyLG5leHRFbGVtZW50U2libGluZzpxZyxwcmVwZW5kOnJtLHByZXBlbmRDaGlsZDp0bSxwcmV2RWxlbWVudFNpYmxpbmc6amcscmVtb3ZlRWxlbWVudDpCbixyZW1vdmVTdWJzZXRzOmNtLHJlcGxhY2VFbGVtZW50OlhnLHRlc3RFbGVtZW50OmFtLHRleHRDb250ZW50OnhzLHVuaXF1ZVNvcnQ6aG19KSxibT17dHJ1ZUZ1bmM6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sZmFsc2VGdW5jOmZ1bmN0aW9uKCl7cmV0dXJuITF9fSxnZT1YcyhibSksY2U7KGZ1bmN0aW9uKHIpe3IuQXR0cmlidXRlPSJhdHRyaWJ1dGUiLHIuUHNldWRvPSJwc2V1ZG8iLHIuUHNldWRvRWxlbWVudD0icHNldWRvLWVsZW1lbnQiLHIuVGFnPSJ0YWciLHIuVW5pdmVyc2FsPSJ1bml2ZXJzYWwiLHIuQWRqYWNlbnQ9ImFkamFjZW50IixyLkNoaWxkPSJjaGlsZCIsci5EZXNjZW5kYW50PSJkZXNjZW5kYW50IixyLlBhcmVudD0icGFyZW50IixyLlNpYmxpbmc9InNpYmxpbmciLHIuQ29sdW1uQ29tYmluYXRvcj0iY29sdW1uLWNvbWJpbmF0b3IifSkoY2V8fChjZT17fSkpO3ZhciBLZTsoZnVuY3Rpb24ocil7ci5Bbnk9ImFueSIsci5FbGVtZW50PSJlbGVtZW50IixyLkVuZD0iZW5kIixyLkVxdWFscz0iZXF1YWxzIixyLkV4aXN0cz0iZXhpc3RzIixyLkh5cGhlbj0iaHlwaGVuIixyLk5vdD0ibm90IixyLlN0YXJ0PSJzdGFydCJ9KShLZXx8KEtlPXt9KSk7Y29uc3QgUWw9L15bXlxcI10/KD86XFwoPzpbXGRhLWZdezEsNn1ccz98Lil8W1x3XC1cdTAwYjAtXHVGRkZGXSkrLyxDbT0vXFwoW1xkYS1mXXsxLDZ9XHM/fChccyl8LikvZ2ksU209bmV3IE1hcChbWzEyNixLZS5FbGVtZW50XSxbOTQsS2UuU3RhcnRdLFszNixLZS5FbmRdLFs0MixLZS5BbnldLFszMyxLZS5Ob3RdLFsxMjQsS2UuSHlwaGVuXV0pLEVtPW5ldyBTZXQoWyJoYXMiLCJub3QiLCJtYXRjaGVzIiwiaXMiLCJ3aGVyZSIsImhvc3QiLCJob3N0LWNvbnRleHQiXSk7ZnVuY3Rpb24geW0ocil7c3dpdGNoKHIudHlwZSl7Y2FzZSBjZS5BZGphY2VudDpjYXNlIGNlLkNoaWxkOmNhc2UgY2UuRGVzY2VuZGFudDpjYXNlIGNlLlBhcmVudDpjYXNlIGNlLlNpYmxpbmc6Y2FzZSBjZS5Db2x1bW5Db21iaW5hdG9yOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fWNvbnN0IHZtPW5ldyBTZXQoWyJjb250YWlucyIsImljb250YWlucyJdKTtmdW5jdGlvbiB3bShyLGUsdCl7Y29uc3Qgbj1wYXJzZUludChlLDE2KS02NTUzNjtyZXR1cm4gbiE9PW58fHQ/ZTpuPDA/U3RyaW5nLmZyb21DaGFyQ29kZShuKzY1NTM2KTpTdHJpbmcuZnJvbUNoYXJDb2RlKG4+PjEwfDU1Mjk2LG4mMTAyM3w1NjMyMCl9ZnVuY3Rpb24gX24ocil7cmV0dXJuIHIucmVwbGFjZShDbSx3bSl9ZnVuY3Rpb24gZWEocil7cmV0dXJuIHI9PT0zOXx8cj09PTM0fWZ1bmN0aW9uIFdsKHIpe3JldHVybiByPT09MzJ8fHI9PT05fHxyPT09MTB8fHI9PT0xMnx8cj09PTEzfWZ1bmN0aW9uIEtsKHIpe2NvbnN0IGU9W10sdD1ZbChlLGAke3J9YCwwKTtpZih0PHIubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgVW5tYXRjaGVkIHNlbGVjdG9yOiAke3Iuc2xpY2UodCl9YCk7cmV0dXJuIGV9ZnVuY3Rpb24gWWwocixlLHQpe2xldCBuPVtdO2Z1bmN0aW9uIHMoZyl7Y29uc3QgZj1lLnNsaWNlKHQrZykubWF0Y2goUWwpO2lmKCFmKXRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgbmFtZSwgZm91bmQgJHtlLnNsaWNlKHQpfWApO2NvbnN0W0NdPWY7cmV0dXJuIHQrPWcrQy5sZW5ndGgsX24oQyl9ZnVuY3Rpb24gaShnKXtmb3IodCs9Zzt0PGUubGVuZ3RoJiZXbChlLmNoYXJDb2RlQXQodCkpOyl0Kyt9ZnVuY3Rpb24gYSgpe3QrPTE7Y29uc3QgZz10O2xldCBmPTE7Zm9yKDtmPjAmJnQ8ZS5sZW5ndGg7dCsrKWUuY2hhckNvZGVBdCh0KT09PTQwJiYhbyh0KT9mKys6ZS5jaGFyQ29kZUF0KHQpPT09NDEmJiFvKHQpJiZmLS07aWYoZil0aHJvdyBuZXcgRXJyb3IoIlBhcmVudGhlc2lzIG5vdCBtYXRjaGVkIik7cmV0dXJuIF9uKGUuc2xpY2UoZyx0LTEpKX1mdW5jdGlvbiBvKGcpe2xldCBmPTA7Zm9yKDtlLmNoYXJDb2RlQXQoLS1nKT09PTkyOylmKys7cmV0dXJuKGYmMSk9PT0xfWZ1bmN0aW9uIHUoKXtpZihuLmxlbmd0aD4wJiZ5bShuW24ubGVuZ3RoLTFdKSl0aHJvdyBuZXcgRXJyb3IoIkRpZCBub3QgZXhwZWN0IHN1Y2Nlc3NpdmUgdHJhdmVyc2Fscy4iKX1mdW5jdGlvbiBsKGcpe2lmKG4ubGVuZ3RoPjAmJm5bbi5sZW5ndGgtMV0udHlwZT09PWNlLkRlc2NlbmRhbnQpe25bbi5sZW5ndGgtMV0udHlwZT1nO3JldHVybn11KCksbi5wdXNoKHt0eXBlOmd9KX1mdW5jdGlvbiBBKGcsZil7bi5wdXNoKHt0eXBlOmNlLkF0dHJpYnV0ZSxuYW1lOmcsYWN0aW9uOmYsdmFsdWU6cygxKSxuYW1lc3BhY2U6bnVsbCxpZ25vcmVDYXNlOiJxdWlya3MifSl9ZnVuY3Rpb24gZCgpe2lmKG4ubGVuZ3RoJiZuW24ubGVuZ3RoLTFdLnR5cGU9PT1jZS5EZXNjZW5kYW50JiZuLnBvcCgpLG4ubGVuZ3RoPT09MCl0aHJvdyBuZXcgRXJyb3IoIkVtcHR5IHN1Yi1zZWxlY3RvciIpO3IucHVzaChuKX1pZihpKDApLGUubGVuZ3RoPT09dClyZXR1cm4gdDtlOmZvcig7dDxlLmxlbmd0aDspe2NvbnN0IGc9ZS5jaGFyQ29kZUF0KHQpO3N3aXRjaChnKXtjYXNlIDMyOmNhc2UgOTpjYXNlIDEwOmNhc2UgMTI6Y2FzZSAxMzp7KG4ubGVuZ3RoPT09MHx8blswXS50eXBlIT09Y2UuRGVzY2VuZGFudCkmJih1KCksbi5wdXNoKHt0eXBlOmNlLkRlc2NlbmRhbnR9KSksaSgxKTticmVha31jYXNlIDYyOntsKGNlLkNoaWxkKSxpKDEpO2JyZWFrfWNhc2UgNjA6e2woY2UuUGFyZW50KSxpKDEpO2JyZWFrfWNhc2UgMTI2OntsKGNlLlNpYmxpbmcpLGkoMSk7YnJlYWt9Y2FzZSA0Mzp7bChjZS5BZGphY2VudCksaSgxKTticmVha31jYXNlIDQ2OntBKCJjbGFzcyIsS2UuRWxlbWVudCk7YnJlYWt9Y2FzZSAzNTp7QSgiaWQiLEtlLkVxdWFscyk7YnJlYWt9Y2FzZSA5MTp7aSgxKTtsZXQgZixDPW51bGw7ZS5jaGFyQ29kZUF0KHQpPT09MTI0P2Y9cygxKTplLnN0YXJ0c1dpdGgoIip8Iix0KT8oQz0iKiIsZj1zKDIpKTooZj1zKDApLGUuY2hhckNvZGVBdCh0KT09PTEyNCYmZS5jaGFyQ29kZUF0KHQrMSkhPT02MSYmKEM9ZixmPXMoMSkpKSxpKDApO2xldCBwPUtlLkV4aXN0cztjb25zdCBiPVNtLmdldChlLmNoYXJDb2RlQXQodCkpO2lmKGIpe2lmKHA9YixlLmNoYXJDb2RlQXQodCsxKSE9PTYxKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgYD1gIik7aSgyKX1lbHNlIGUuY2hhckNvZGVBdCh0KT09PTYxJiYocD1LZS5FcXVhbHMsaSgxKSk7bGV0IG09IiIsRT1udWxsO2lmKHAhPT0iZXhpc3RzIil7aWYoZWEoZS5jaGFyQ29kZUF0KHQpKSl7Y29uc3QgST1lLmNoYXJDb2RlQXQodCk7bGV0IFI9dCsxO2Zvcig7UjxlLmxlbmd0aCYmKGUuY2hhckNvZGVBdChSKSE9PUl8fG8oUikpOylSKz0xO2lmKGUuY2hhckNvZGVBdChSKSE9PUkpdGhyb3cgbmV3IEVycm9yKCJBdHRyaWJ1dGUgdmFsdWUgZGlkbid0IGVuZCIpO209X24oZS5zbGljZSh0KzEsUikpLHQ9UisxfWVsc2V7Y29uc3QgST10O2Zvcig7dDxlLmxlbmd0aCYmKCFXbChlLmNoYXJDb2RlQXQodCkpJiZlLmNoYXJDb2RlQXQodCkhPT05M3x8byh0KSk7KXQrPTE7bT1fbihlLnNsaWNlKEksdCkpfWkoMCk7Y29uc3QgTj1lLmNoYXJDb2RlQXQodCl8MzI7Tj09PTExNT8oRT0hMSxpKDEpKTpOPT09MTA1JiYoRT0hMCxpKDEpKX1pZihlLmNoYXJDb2RlQXQodCkhPT05Myl0aHJvdyBuZXcgRXJyb3IoIkF0dHJpYnV0ZSBzZWxlY3RvciBkaWRuJ3QgdGVybWluYXRlIik7dCs9MTtjb25zdCB3PXt0eXBlOmNlLkF0dHJpYnV0ZSxuYW1lOmYsYWN0aW9uOnAsdmFsdWU6bSxuYW1lc3BhY2U6QyxpZ25vcmVDYXNlOkV9O24ucHVzaCh3KTticmVha31jYXNlIDU4OntpZihlLmNoYXJDb2RlQXQodCsxKT09PTU4KXtuLnB1c2goe3R5cGU6Y2UuUHNldWRvRWxlbWVudCxuYW1lOnMoMikudG9Mb3dlckNhc2UoKSxkYXRhOmUuY2hhckNvZGVBdCh0KT09PTQwP2EoKTpudWxsfSk7Y29udGludWV9Y29uc3QgZj1zKDEpLnRvTG93ZXJDYXNlKCk7bGV0IEM9bnVsbDtpZihlLmNoYXJDb2RlQXQodCk9PT00MClpZihFbS5oYXMoZikpe2lmKGVhKGUuY2hhckNvZGVBdCh0KzEpKSl0aHJvdyBuZXcgRXJyb3IoYFBzZXVkby1zZWxlY3RvciAke2Z9IGNhbm5vdCBiZSBxdW90ZWRgKTtpZihDPVtdLHQ9WWwoQyxlLHQrMSksZS5jaGFyQ29kZUF0KHQpIT09NDEpdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGNsb3NpbmcgcGFyZW50aGVzaXMgaW4gOiR7Zn0gKCR7ZX0pYCk7dCs9MX1lbHNle2lmKEM9YSgpLHZtLmhhcyhmKSl7Y29uc3QgcD1DLmNoYXJDb2RlQXQoMCk7cD09PUMuY2hhckNvZGVBdChDLmxlbmd0aC0xKSYmZWEocCkmJihDPUMuc2xpY2UoMSwtMSkpfUM9X24oQyl9bi5wdXNoKHt0eXBlOmNlLlBzZXVkbyxuYW1lOmYsZGF0YTpDfSk7YnJlYWt9Y2FzZSA0NDp7ZCgpLG49W10saSgxKTticmVha31kZWZhdWx0OntpZihlLnN0YXJ0c1dpdGgoIi8qIix0KSl7Y29uc3QgcD1lLmluZGV4T2YoIiovIix0KzIpO2lmKHA8MCl0aHJvdyBuZXcgRXJyb3IoIkNvbW1lbnQgd2FzIG5vdCB0ZXJtaW5hdGVkIik7dD1wKzIsbi5sZW5ndGg9PT0wJiZpKDApO2JyZWFrfWxldCBmPW51bGwsQztpZihnPT09NDIpdCs9MSxDPSIqIjtlbHNlIGlmKGc9PT0xMjQpe2lmKEM9IiIsZS5jaGFyQ29kZUF0KHQrMSk9PT0xMjQpe2woY2UuQ29sdW1uQ29tYmluYXRvciksaSgyKTticmVha319ZWxzZSBpZihRbC50ZXN0KGUuc2xpY2UodCkpKUM9cygwKTtlbHNlIGJyZWFrIGU7ZS5jaGFyQ29kZUF0KHQpPT09MTI0JiZlLmNoYXJDb2RlQXQodCsxKSE9PTEyNCYmKGY9QyxlLmNoYXJDb2RlQXQodCsxKT09PTQyPyhDPSIqIix0Kz0yKTpDPXMoMSkpLG4ucHVzaChDPT09IioiP3t0eXBlOmNlLlVuaXZlcnNhbCxuYW1lc3BhY2U6Zn06e3R5cGU6Y2UuVGFnLG5hbWU6QyxuYW1lc3BhY2U6Zn0pfX19cmV0dXJuIGQoKSx0fWNvbnN0IFpsPW5ldyBNYXAoW1tjZS5Vbml2ZXJzYWwsNTBdLFtjZS5UYWcsMzBdLFtjZS5BdHRyaWJ1dGUsMV0sW2NlLlBzZXVkbywwXV0pO2Z1bmN0aW9uIHRhKHIpe3JldHVybiFabC5oYXMoci50eXBlKX1jb25zdCBEbT1uZXcgTWFwKFtbS2UuRXhpc3RzLDEwXSxbS2UuRXF1YWxzLDhdLFtLZS5Ob3QsN10sW0tlLlN0YXJ0LDZdLFtLZS5FbmQsNl0sW0tlLkFueSw1XV0pO2Z1bmN0aW9uIEltKHIpe2NvbnN0IGU9ci5tYXAoVmwpO2ZvcihsZXQgdD0xO3Q8ci5sZW5ndGg7dCsrKXtjb25zdCBuPWVbdF07aWYoIShuPDApKWZvcihsZXQgcz10LTE7cz49MCYmbjxlW3NdO3MtLSl7Y29uc3QgaT1yW3MrMV07cltzKzFdPXJbc10scltzXT1pLGVbcysxXT1lW3NdLGVbc109bn19fWZ1bmN0aW9uIFZsKHIpe3ZhciBlLHQ7bGV0IG49KGU9WmwuZ2V0KHIudHlwZSkpIT09bnVsbCYmZSE9PXZvaWQgMD9lOi0xO3JldHVybiByLnR5cGU9PT1jZS5BdHRyaWJ1dGU/KG49KHQ9RG0uZ2V0KHIuYWN0aW9uKSkhPT1udWxsJiZ0IT09dm9pZCAwP3Q6NCxyLmFjdGlvbj09PUtlLkVxdWFscyYmci5uYW1lPT09ImlkIiYmKG49OSksci5pZ25vcmVDYXNlJiYobj4+PTEpKTpyLnR5cGU9PT1jZS5Qc2V1ZG8mJihyLmRhdGE/ci5uYW1lPT09ImhhcyJ8fHIubmFtZT09PSJjb250YWlucyI/bj0wOkFycmF5LmlzQXJyYXkoci5kYXRhKT8obj1NYXRoLm1pbiguLi5yLmRhdGEubWFwKHM9Pk1hdGgubWluKC4uLnMubWFwKFZsKSkpKSxuPDAmJihuPTApKTpuPTI6bj0zKSxufWNvbnN0IE5tPS9bLVtcXXt9KCkqKz8uLFxcXiR8I1xzXS9nO2Z1bmN0aW9uIHpsKHIpe3JldHVybiByLnJlcGxhY2UoTm0sIlxcJCYiKX1jb25zdCBrbT1uZXcgU2V0KFsiYWNjZXB0IiwiYWNjZXB0LWNoYXJzZXQiLCJhbGlnbiIsImFsaW5rIiwiYXhpcyIsImJnY29sb3IiLCJjaGFyc2V0IiwiY2hlY2tlZCIsImNsZWFyIiwiY29kZXR5cGUiLCJjb2xvciIsImNvbXBhY3QiLCJkZWNsYXJlIiwiZGVmZXIiLCJkaXIiLCJkaXJlY3Rpb24iLCJkaXNhYmxlZCIsImVuY3R5cGUiLCJmYWNlIiwiZnJhbWUiLCJocmVmbGFuZyIsImh0dHAtZXF1aXYiLCJsYW5nIiwibGFuZ3VhZ2UiLCJsaW5rIiwibWVkaWEiLCJtZXRob2QiLCJtdWx0aXBsZSIsIm5vaHJlZiIsIm5vcmVzaXplIiwibm9zaGFkZSIsIm5vd3JhcCIsInJlYWRvbmx5IiwicmVsIiwicmV2IiwicnVsZXMiLCJzY29wZSIsInNjcm9sbGluZyIsInNlbGVjdGVkIiwic2hhcGUiLCJ0YXJnZXQiLCJ0ZXh0IiwidHlwZSIsInZhbGlnbiIsInZhbHVldHlwZSIsInZsaW5rIl0pO2Z1bmN0aW9uIHdyKHIsZSl7cmV0dXJuIHR5cGVvZiByLmlnbm9yZUNhc2U9PSJib29sZWFuIj9yLmlnbm9yZUNhc2U6ci5pZ25vcmVDYXNlPT09InF1aXJrcyI/ISFlLnF1aXJrc01vZGU6IWUueG1sTW9kZSYma20uaGFzKHIubmFtZSl9Y29uc3QgeG09e2VxdWFscyhyLGUsdCl7Y29uc3R7YWRhcHRlcjpufT10LHtuYW1lOnN9PWU7bGV0e3ZhbHVlOml9PWU7cmV0dXJuIHdyKGUsdCk/KGk9aS50b0xvd2VyQ2FzZSgpLGE9Pntjb25zdCBvPW4uZ2V0QXR0cmlidXRlVmFsdWUoYSxzKTtyZXR1cm4gbyE9bnVsbCYmby5sZW5ndGg9PT1pLmxlbmd0aCYmby50b0xvd2VyQ2FzZSgpPT09aSYmcihhKX0pOmE9Pm4uZ2V0QXR0cmlidXRlVmFsdWUoYSxzKT09PWkmJnIoYSl9LGh5cGhlbihyLGUsdCl7Y29uc3R7YWRhcHRlcjpufT10LHtuYW1lOnN9PWU7bGV0e3ZhbHVlOml9PWU7Y29uc3QgYT1pLmxlbmd0aDtyZXR1cm4gd3IoZSx0KT8oaT1pLnRvTG93ZXJDYXNlKCksZnVuY3Rpb24odSl7Y29uc3QgbD1uLmdldEF0dHJpYnV0ZVZhbHVlKHUscyk7cmV0dXJuIGwhPW51bGwmJihsLmxlbmd0aD09PWF8fGwuY2hhckF0KGEpPT09Ii0iKSYmbC5zdWJzdHIoMCxhKS50b0xvd2VyQ2FzZSgpPT09aSYmcih1KX0pOmZ1bmN0aW9uKHUpe2NvbnN0IGw9bi5nZXRBdHRyaWJ1dGVWYWx1ZSh1LHMpO3JldHVybiBsIT1udWxsJiYobC5sZW5ndGg9PT1hfHxsLmNoYXJBdChhKT09PSItIikmJmwuc3Vic3RyKDAsYSk9PT1pJiZyKHUpfX0sZWxlbWVudChyLGUsdCl7Y29uc3R7YWRhcHRlcjpufT10LHtuYW1lOnMsdmFsdWU6aX09ZTtpZigvXHMvLnRlc3QoaSkpcmV0dXJuIGdlLmZhbHNlRnVuYztjb25zdCBhPW5ldyBSZWdFeHAoYCg/Ol58XFxzKSR7emwoaSl9KD86JHxcXHMpYCx3cihlLHQpPyJpIjoiIik7cmV0dXJuIGZ1bmN0aW9uKHUpe2NvbnN0IGw9bi5nZXRBdHRyaWJ1dGVWYWx1ZSh1LHMpO3JldHVybiBsIT1udWxsJiZsLmxlbmd0aD49aS5sZW5ndGgmJmEudGVzdChsKSYmcih1KX19LGV4aXN0cyhyLHtuYW1lOmV9LHthZGFwdGVyOnR9KXtyZXR1cm4gbj0+dC5oYXNBdHRyaWIobixlKSYmcihuKX0sc3RhcnQocixlLHQpe2NvbnN0e2FkYXB0ZXI6bn09dCx7bmFtZTpzfT1lO2xldHt2YWx1ZTppfT1lO2NvbnN0IGE9aS5sZW5ndGg7cmV0dXJuIGE9PT0wP2dlLmZhbHNlRnVuYzp3cihlLHQpPyhpPWkudG9Mb3dlckNhc2UoKSxvPT57Y29uc3QgdT1uLmdldEF0dHJpYnV0ZVZhbHVlKG8scyk7cmV0dXJuIHUhPW51bGwmJnUubGVuZ3RoPj1hJiZ1LnN1YnN0cigwLGEpLnRvTG93ZXJDYXNlKCk9PT1pJiZyKG8pfSk6bz0+e3ZhciB1O3JldHVybiEhKCEoKHU9bi5nZXRBdHRyaWJ1dGVWYWx1ZShvLHMpKT09PW51bGx8fHU9PT12b2lkIDApJiZ1LnN0YXJ0c1dpdGgoaSkpJiZyKG8pfX0sZW5kKHIsZSx0KXtjb25zdHthZGFwdGVyOm59PXQse25hbWU6c309ZTtsZXR7dmFsdWU6aX09ZTtjb25zdCBhPS1pLmxlbmd0aDtyZXR1cm4gYT09PTA/Z2UuZmFsc2VGdW5jOndyKGUsdCk/KGk9aS50b0xvd2VyQ2FzZSgpLG89Pnt2YXIgdTtyZXR1cm4oKHU9bi5nZXRBdHRyaWJ1dGVWYWx1ZShvLHMpKT09PW51bGx8fHU9PT12b2lkIDA/dm9pZCAwOnUuc3Vic3RyKGEpLnRvTG93ZXJDYXNlKCkpPT09aSYmcihvKX0pOm89Pnt2YXIgdTtyZXR1cm4hISghKCh1PW4uZ2V0QXR0cmlidXRlVmFsdWUobyxzKSk9PT1udWxsfHx1PT09dm9pZCAwKSYmdS5lbmRzV2l0aChpKSkmJnIobyl9fSxhbnkocixlLHQpe2NvbnN0e2FkYXB0ZXI6bn09dCx7bmFtZTpzLHZhbHVlOml9PWU7aWYoaT09PSIiKXJldHVybiBnZS5mYWxzZUZ1bmM7aWYod3IoZSx0KSl7Y29uc3QgYT1uZXcgUmVnRXhwKHpsKGkpLCJpIik7cmV0dXJuIGZ1bmN0aW9uKHUpe2NvbnN0IGw9bi5nZXRBdHRyaWJ1dGVWYWx1ZSh1LHMpO3JldHVybiBsIT1udWxsJiZsLmxlbmd0aD49aS5sZW5ndGgmJmEudGVzdChsKSYmcih1KX19cmV0dXJuIGE9Pnt2YXIgbztyZXR1cm4hISghKChvPW4uZ2V0QXR0cmlidXRlVmFsdWUoYSxzKSk9PT1udWxsfHxvPT09dm9pZCAwKSYmby5pbmNsdWRlcyhpKSkmJnIoYSl9fSxub3QocixlLHQpe2NvbnN0e2FkYXB0ZXI6bn09dCx7bmFtZTpzfT1lO2xldHt2YWx1ZTppfT1lO3JldHVybiBpPT09IiI/YT0+ISFuLmdldEF0dHJpYnV0ZVZhbHVlKGEscykmJnIoYSk6d3IoZSx0KT8oaT1pLnRvTG93ZXJDYXNlKCksYT0+e2NvbnN0IG89bi5nZXRBdHRyaWJ1dGVWYWx1ZShhLHMpO3JldHVybihvPT1udWxsfHxvLmxlbmd0aCE9PWkubGVuZ3RofHxvLnRvTG93ZXJDYXNlKCkhPT1pKSYmcihhKX0pOmE9Pm4uZ2V0QXR0cmlidXRlVmFsdWUoYSxzKSE9PWkmJnIoYSl9fSxUbT1uZXcgU2V0KFs5LDEwLDEyLDEzLDMyXSksSmw9IjAiLmNoYXJDb2RlQXQoMCksQm09IjkiLmNoYXJDb2RlQXQoMCk7ZnVuY3Rpb24gX20ocil7aWYocj1yLnRyaW0oKS50b0xvd2VyQ2FzZSgpLHI9PT0iZXZlbiIpcmV0dXJuWzIsMF07aWYocj09PSJvZGQiKXJldHVyblsyLDFdO2xldCBlPTAsdD0wLG49aSgpLHM9YSgpO2lmKGU8ci5sZW5ndGgmJnIuY2hhckF0KGUpPT09Im4iJiYoZSsrLHQ9bioocz8/MSksbygpLGU8ci5sZW5ndGg/KG49aSgpLG8oKSxzPWEoKSk6bj1zPTApLHM9PT1udWxsfHxlPHIubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgbi10aCBydWxlIGNvdWxkbid0IGJlIHBhcnNlZCAoJyR7cn0nKWApO3JldHVyblt0LG4qc107ZnVuY3Rpb24gaSgpe3JldHVybiByLmNoYXJBdChlKT09PSItIj8oZSsrLC0xKTooci5jaGFyQXQoZSk9PT0iKyImJmUrKywxKX1mdW5jdGlvbiBhKCl7Y29uc3QgdT1lO2xldCBsPTA7Zm9yKDtlPHIubGVuZ3RoJiZyLmNoYXJDb2RlQXQoZSk+PUpsJiZyLmNoYXJDb2RlQXQoZSk8PUJtOylsPWwqMTArKHIuY2hhckNvZGVBdChlKS1KbCksZSsrO3JldHVybiBlPT09dT9udWxsOmx9ZnVuY3Rpb24gbygpe2Zvcig7ZTxyLmxlbmd0aCYmVG0uaGFzKHIuY2hhckNvZGVBdChlKSk7KWUrK319ZnVuY3Rpb24gUm0ocil7Y29uc3QgZT1yWzBdLHQ9clsxXS0xO2lmKHQ8MCYmZTw9MClyZXR1cm4gZ2UuZmFsc2VGdW5jO2lmKGU9PT0tMSlyZXR1cm4gaT0+aTw9dDtpZihlPT09MClyZXR1cm4gaT0+aT09PXQ7aWYoZT09PTEpcmV0dXJuIHQ8MD9nZS50cnVlRnVuYzppPT5pPj10O2NvbnN0IG49TWF0aC5hYnMoZSkscz0odCVuK24pJW47cmV0dXJuIGU+MT9pPT5pPj10JiZpJW49PT1zOmk9Pmk8PXQmJmklbj09PXN9ZnVuY3Rpb24gUnMocil7cmV0dXJuIFJtKF9tKHIpKX1mdW5jdGlvbiBGcyhyLGUpe3JldHVybiB0PT57Y29uc3Qgbj1lLmdldFBhcmVudCh0KTtyZXR1cm4gbiE9bnVsbCYmZS5pc1RhZyhuKSYmcih0KX19Y29uc3QgcmE9e2NvbnRhaW5zKHIsZSx7YWRhcHRlcjp0fSl7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiByKHMpJiZ0LmdldFRleHQocykuaW5jbHVkZXMoZSl9fSxpY29udGFpbnMocixlLHthZGFwdGVyOnR9KXtjb25zdCBuPWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIHIoaSkmJnQuZ2V0VGV4dChpKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKG4pfX0sIm50aC1jaGlsZCIocixlLHthZGFwdGVyOnQsZXF1YWxzOm59KXtjb25zdCBzPVJzKGUpO3JldHVybiBzPT09Z2UuZmFsc2VGdW5jP2dlLmZhbHNlRnVuYzpzPT09Z2UudHJ1ZUZ1bmM/RnMocix0KTpmdW5jdGlvbihhKXtjb25zdCBvPXQuZ2V0U2libGluZ3MoYSk7bGV0IHU9MDtmb3IobGV0IGw9MDtsPG8ubGVuZ3RoJiYhbihhLG9bbF0pO2wrKyl0LmlzVGFnKG9bbF0pJiZ1Kys7cmV0dXJuIHModSkmJnIoYSl9fSwibnRoLWxhc3QtY2hpbGQiKHIsZSx7YWRhcHRlcjp0LGVxdWFsczpufSl7Y29uc3Qgcz1ScyhlKTtyZXR1cm4gcz09PWdlLmZhbHNlRnVuYz9nZS5mYWxzZUZ1bmM6cz09PWdlLnRydWVGdW5jP0ZzKHIsdCk6ZnVuY3Rpb24oYSl7Y29uc3Qgbz10LmdldFNpYmxpbmdzKGEpO2xldCB1PTA7Zm9yKGxldCBsPW8ubGVuZ3RoLTE7bD49MCYmIW4oYSxvW2xdKTtsLS0pdC5pc1RhZyhvW2xdKSYmdSsrO3JldHVybiBzKHUpJiZyKGEpfX0sIm50aC1vZi10eXBlIihyLGUse2FkYXB0ZXI6dCxlcXVhbHM6bn0pe2NvbnN0IHM9UnMoZSk7cmV0dXJuIHM9PT1nZS5mYWxzZUZ1bmM/Z2UuZmFsc2VGdW5jOnM9PT1nZS50cnVlRnVuYz9GcyhyLHQpOmZ1bmN0aW9uKGEpe2NvbnN0IG89dC5nZXRTaWJsaW5ncyhhKTtsZXQgdT0wO2ZvcihsZXQgbD0wO2w8by5sZW5ndGg7bCsrKXtjb25zdCBBPW9bbF07aWYobihhLEEpKWJyZWFrO3QuaXNUYWcoQSkmJnQuZ2V0TmFtZShBKT09PXQuZ2V0TmFtZShhKSYmdSsrfXJldHVybiBzKHUpJiZyKGEpfX0sIm50aC1sYXN0LW9mLXR5cGUiKHIsZSx7YWRhcHRlcjp0LGVxdWFsczpufSl7Y29uc3Qgcz1ScyhlKTtyZXR1cm4gcz09PWdlLmZhbHNlRnVuYz9nZS5mYWxzZUZ1bmM6cz09PWdlLnRydWVGdW5jP0ZzKHIsdCk6ZnVuY3Rpb24oYSl7Y29uc3Qgbz10LmdldFNpYmxpbmdzKGEpO2xldCB1PTA7Zm9yKGxldCBsPW8ubGVuZ3RoLTE7bD49MDtsLS0pe2NvbnN0IEE9b1tsXTtpZihuKGEsQSkpYnJlYWs7dC5pc1RhZyhBKSYmdC5nZXROYW1lKEEpPT09dC5nZXROYW1lKGEpJiZ1Kyt9cmV0dXJuIHModSkmJnIoYSl9fSxyb290KHIsZSx7YWRhcHRlcjp0fSl7cmV0dXJuIG49Pntjb25zdCBzPXQuZ2V0UGFyZW50KG4pO3JldHVybihzPT1udWxsfHwhdC5pc1RhZyhzKSkmJnIobil9fSxzY29wZShyLGUsdCxuKXtjb25zdHtlcXVhbHM6c309dDtyZXR1cm4hbnx8bi5sZW5ndGg9PT0wP3JhLnJvb3QocixlLHQpOm4ubGVuZ3RoPT09MT9pPT5zKG5bMF0saSkmJnIoaSk6aT0+bi5pbmNsdWRlcyhpKSYmcihpKX0saG92ZXI6bmEoImlzSG92ZXJlZCIpLHZpc2l0ZWQ6bmEoImlzVmlzaXRlZCIpLGFjdGl2ZTpuYSgiaXNBY3RpdmUiKX07ZnVuY3Rpb24gbmEocil7cmV0dXJuIGZ1bmN0aW9uKHQsbix7YWRhcHRlcjpzfSl7Y29uc3QgaT1zW3JdO3JldHVybiB0eXBlb2YgaSE9ImZ1bmN0aW9uIj9nZS5mYWxzZUZ1bmM6ZnVuY3Rpb24obyl7cmV0dXJuIGkobykmJnQobyl9fX1jb25zdCBxbD17ZW1wdHkocix7YWRhcHRlcjplfSl7cmV0dXJuIWUuZ2V0Q2hpbGRyZW4ocikuc29tZSh0PT5lLmlzVGFnKHQpfHxlLmdldFRleHQodCkhPT0iIil9LCJmaXJzdC1jaGlsZCIocix7YWRhcHRlcjplLGVxdWFsczp0fSl7aWYoZS5wcmV2RWxlbWVudFNpYmxpbmcpcmV0dXJuIGUucHJldkVsZW1lbnRTaWJsaW5nKHIpPT1udWxsO2NvbnN0IG49ZS5nZXRTaWJsaW5ncyhyKS5maW5kKHM9PmUuaXNUYWcocykpO3JldHVybiBuIT1udWxsJiZ0KHIsbil9LCJsYXN0LWNoaWxkIihyLHthZGFwdGVyOmUsZXF1YWxzOnR9KXtjb25zdCBuPWUuZ2V0U2libGluZ3Mocik7Zm9yKGxldCBzPW4ubGVuZ3RoLTE7cz49MDtzLS0pe2lmKHQocixuW3NdKSlyZXR1cm4hMDtpZihlLmlzVGFnKG5bc10pKWJyZWFrfXJldHVybiExfSwiZmlyc3Qtb2YtdHlwZSIocix7YWRhcHRlcjplLGVxdWFsczp0fSl7Y29uc3Qgbj1lLmdldFNpYmxpbmdzKHIpLHM9ZS5nZXROYW1lKHIpO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXtjb25zdCBhPW5baV07aWYodChyLGEpKXJldHVybiEwO2lmKGUuaXNUYWcoYSkmJmUuZ2V0TmFtZShhKT09PXMpYnJlYWt9cmV0dXJuITF9LCJsYXN0LW9mLXR5cGUiKHIse2FkYXB0ZXI6ZSxlcXVhbHM6dH0pe2NvbnN0IG49ZS5nZXRTaWJsaW5ncyhyKSxzPWUuZ2V0TmFtZShyKTtmb3IobGV0IGk9bi5sZW5ndGgtMTtpPj0wO2ktLSl7Y29uc3QgYT1uW2ldO2lmKHQocixhKSlyZXR1cm4hMDtpZihlLmlzVGFnKGEpJiZlLmdldE5hbWUoYSk9PT1zKWJyZWFrfXJldHVybiExfSwib25seS1vZi10eXBlIihyLHthZGFwdGVyOmUsZXF1YWxzOnR9KXtjb25zdCBuPWUuZ2V0TmFtZShyKTtyZXR1cm4gZS5nZXRTaWJsaW5ncyhyKS5ldmVyeShzPT50KHIscyl8fCFlLmlzVGFnKHMpfHxlLmdldE5hbWUocykhPT1uKX0sIm9ubHktY2hpbGQiKHIse2FkYXB0ZXI6ZSxlcXVhbHM6dH0pe3JldHVybiBlLmdldFNpYmxpbmdzKHIpLmV2ZXJ5KG49PnQocixuKXx8IWUuaXNUYWcobikpfX07ZnVuY3Rpb24gamwocixlLHQsbil7aWYodD09PW51bGwpe2lmKHIubGVuZ3RoPm4pdGhyb3cgbmV3IEVycm9yKGBQc2V1ZG8tY2xhc3MgOiR7ZX0gcmVxdWlyZXMgYW4gYXJndW1lbnRgKX1lbHNlIGlmKHIubGVuZ3RoPT09bil0aHJvdyBuZXcgRXJyb3IoYFBzZXVkby1jbGFzcyA6JHtlfSBkb2Vzbid0IGhhdmUgYW55IGFyZ3VtZW50c2ApfWNvbnN0IEZtPXsiYW55LWxpbmsiOiI6aXMoYSwgYXJlYSwgbGluaylbaHJlZl0iLGxpbms6IjphbnktbGluazpub3QoOnZpc2l0ZWQpIixkaXNhYmxlZDpgOmlzKAogICAgICAgIDppcyhidXR0b24sIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBvcHRncm91cCwgb3B0aW9uKVtkaXNhYmxlZF0sCiAgICAgICAgb3B0Z3JvdXBbZGlzYWJsZWRdID4gb3B0aW9uLAogICAgICAgIGZpZWxkc2V0W2Rpc2FibGVkXTpub3QoZmllbGRzZXRbZGlzYWJsZWRdIGxlZ2VuZDpmaXJzdC1vZi10eXBlICopCiAgICApYCxlbmFibGVkOiI6bm90KDpkaXNhYmxlZCkiLGNoZWNrZWQ6Ijppcyg6aXMoaW5wdXRbdHlwZT1yYWRpb10sIGlucHV0W3R5cGU9Y2hlY2tib3hdKVtjaGVja2VkXSwgb3B0aW9uOnNlbGVjdGVkKSIscmVxdWlyZWQ6IjppcyhpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSlbcmVxdWlyZWRdIixvcHRpb25hbDoiOmlzKGlucHV0LCBzZWxlY3QsIHRleHRhcmVhKTpub3QoW3JlcXVpcmVkXSkiLHNlbGVjdGVkOiJvcHRpb246aXMoW3NlbGVjdGVkXSwgc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpub3QoOmhhcyg+IG9wdGlvbltzZWxlY3RlZF0pKSA+IDpmaXJzdC1vZi10eXBlKSIsY2hlY2tib3g6Ilt0eXBlPWNoZWNrYm94XSIsZmlsZToiW3R5cGU9ZmlsZV0iLHBhc3N3b3JkOiJbdHlwZT1wYXNzd29yZF0iLHJhZGlvOiJbdHlwZT1yYWRpb10iLHJlc2V0OiJbdHlwZT1yZXNldF0iLGltYWdlOiJbdHlwZT1pbWFnZV0iLHN1Ym1pdDoiW3R5cGU9c3VibWl0XSIscGFyZW50OiI6bm90KDplbXB0eSkiLGhlYWRlcjoiOmlzKGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYpIixidXR0b246IjppcyhidXR0b24sIGlucHV0W3R5cGU9YnV0dG9uXSkiLGlucHV0OiI6aXMoaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QsIGJ1dHRvbikiLHRleHQ6ImlucHV0OmlzKDpub3QoW3R5cGUhPScnXSksIFt0eXBlPXRleHRdKSJ9LFhsPXt9O2Z1bmN0aW9uICRsKHIsZSl7cmV0dXJuIHI9PT1nZS5mYWxzZUZ1bmM/Z2UuZmFsc2VGdW5jOnQ9PmUuaXNUYWcodCkmJnIodCl9ZnVuY3Rpb24gTW0ocixlKXtjb25zdCB0PWUuZ2V0U2libGluZ3Mocik7aWYodC5sZW5ndGg8PTEpcmV0dXJuW107Y29uc3Qgbj10LmluZGV4T2Yocik7cmV0dXJuIG48MHx8bj09PXQubGVuZ3RoLTE/W106dC5zbGljZShuKzEpLmZpbHRlcihlLmlzVGFnKX1mdW5jdGlvbiBzYShyKXtyZXR1cm57eG1sTW9kZTohIXIueG1sTW9kZSxsb3dlckNhc2VBdHRyaWJ1dGVOYW1lczohIXIubG93ZXJDYXNlQXR0cmlidXRlTmFtZXMsbG93ZXJDYXNlVGFnczohIXIubG93ZXJDYXNlVGFncyxxdWlya3NNb2RlOiEhci5xdWlya3NNb2RlLGNhY2hlUmVzdWx0czohIXIuY2FjaGVSZXN1bHRzLHBzZXVkb3M6ci5wc2V1ZG9zLGFkYXB0ZXI6ci5hZGFwdGVyLGVxdWFsczpyLmVxdWFsc319Y29uc3QgaWE9KHIsZSx0LG4scyk9Pntjb25zdCBpPXMoZSxzYSh0KSxuKTtyZXR1cm4gaT09PWdlLnRydWVGdW5jP3I6aT09PWdlLmZhbHNlRnVuYz9nZS5mYWxzZUZ1bmM6YT0+aShhKSYmcihhKX0sYWE9e2lzOmlhLG1hdGNoZXM6aWEsd2hlcmU6aWEsbm90KHIsZSx0LG4scyl7Y29uc3QgaT1zKGUsc2EodCksbik7cmV0dXJuIGk9PT1nZS5mYWxzZUZ1bmM/cjppPT09Z2UudHJ1ZUZ1bmM/Z2UuZmFsc2VGdW5jOmE9PiFpKGEpJiZyKGEpfSxoYXMocixlLHQsbixzKXtjb25zdHthZGFwdGVyOml9PXQsYT1zYSh0KTthLnJlbGF0aXZlU2VsZWN0b3I9ITA7Y29uc3Qgbz1lLnNvbWUoQT0+QS5zb21lKHRhKSk/W1hsXTp2b2lkIDAsdT1zKGUsYSxvKTtpZih1PT09Z2UuZmFsc2VGdW5jKXJldHVybiBnZS5mYWxzZUZ1bmM7Y29uc3QgbD0kbCh1LGkpO2lmKG8mJnUhPT1nZS50cnVlRnVuYyl7Y29uc3R7c2hvdWxkVGVzdE5leHRTaWJsaW5nczpBPSExfT11O3JldHVybiBkPT57aWYoIXIoZCkpcmV0dXJuITE7b1swXT1kO2NvbnN0IGc9aS5nZXRDaGlsZHJlbihkKSxmPUE/Wy4uLmcsLi4uTW0oZCxpKV06ZztyZXR1cm4gaS5leGlzdHNPbmUobCxmKX19cmV0dXJuIEE9PnIoQSkmJmkuZXhpc3RzT25lKGwsaS5nZXRDaGlsZHJlbihBKSl9fTtmdW5jdGlvbiBPbShyLGUsdCxuLHMpe3ZhciBpO2NvbnN0e25hbWU6YSxkYXRhOm99PWU7aWYoQXJyYXkuaXNBcnJheShvKSl7aWYoIShhIGluIGFhKSl0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gcHNldWRvLWNsYXNzIDoke2F9KCR7b30pYCk7cmV0dXJuIGFhW2FdKHIsbyx0LG4scyl9Y29uc3QgdT0oaT10LnBzZXVkb3MpPT09bnVsbHx8aT09PXZvaWQgMD92b2lkIDA6aVthXSxsPXR5cGVvZiB1PT0ic3RyaW5nIj91OkZtW2FdO2lmKHR5cGVvZiBsPT0ic3RyaW5nIil7aWYobyE9bnVsbCl0aHJvdyBuZXcgRXJyb3IoYFBzZXVkbyAke2F9IGRvZXNuJ3QgaGF2ZSBhbnkgYXJndW1lbnRzYCk7Y29uc3QgQT1LbChsKTtyZXR1cm4gYWEuaXMocixBLHQsbixzKX1pZih0eXBlb2YgdT09ImZ1bmN0aW9uIilyZXR1cm4gamwodSxhLG8sMSksQT0+dShBLG8pJiZyKEEpO2lmKGEgaW4gcmEpcmV0dXJuIHJhW2FdKHIsbyx0LG4pO2lmKGEgaW4gcWwpe2NvbnN0IEE9cWxbYV07cmV0dXJuIGpsKEEsYSxvLDIpLGQ9PkEoZCx0LG8pJiZyKGQpfXRocm93IG5ldyBFcnJvcihgVW5rbm93biBwc2V1ZG8tY2xhc3MgOiR7YX1gKX1mdW5jdGlvbiBvYShyLGUpe2NvbnN0IHQ9ZS5nZXRQYXJlbnQocik7cmV0dXJuIHQmJmUuaXNUYWcodCk/dDpudWxsfWZ1bmN0aW9uIExtKHIsZSx0LG4scyl7Y29uc3R7YWRhcHRlcjppLGVxdWFsczphfT10O3N3aXRjaChlLnR5cGUpe2Nhc2UgY2UuUHNldWRvRWxlbWVudDp0aHJvdyBuZXcgRXJyb3IoIlBzZXVkby1lbGVtZW50cyBhcmUgbm90IHN1cHBvcnRlZCBieSBjc3Mtc2VsZWN0Iik7Y2FzZSBjZS5Db2x1bW5Db21iaW5hdG9yOnRocm93IG5ldyBFcnJvcigiQ29sdW1uIGNvbWJpbmF0b3JzIGFyZSBub3QgeWV0IHN1cHBvcnRlZCBieSBjc3Mtc2VsZWN0Iik7Y2FzZSBjZS5BdHRyaWJ1dGU6e2lmKGUubmFtZXNwYWNlIT1udWxsKXRocm93IG5ldyBFcnJvcigiTmFtZXNwYWNlZCBhdHRyaWJ1dGVzIGFyZSBub3QgeWV0IHN1cHBvcnRlZCBieSBjc3Mtc2VsZWN0Iik7cmV0dXJuKCF0LnhtbE1vZGV8fHQubG93ZXJDYXNlQXR0cmlidXRlTmFtZXMpJiYoZS5uYW1lPWUubmFtZS50b0xvd2VyQ2FzZSgpKSx4bVtlLmFjdGlvbl0ocixlLHQpfWNhc2UgY2UuUHNldWRvOnJldHVybiBPbShyLGUsdCxuLHMpO2Nhc2UgY2UuVGFnOntpZihlLm5hbWVzcGFjZSE9bnVsbCl0aHJvdyBuZXcgRXJyb3IoIk5hbWVzcGFjZWQgdGFnIG5hbWVzIGFyZSBub3QgeWV0IHN1cHBvcnRlZCBieSBjc3Mtc2VsZWN0Iik7bGV0e25hbWU6b309ZTtyZXR1cm4oIXQueG1sTW9kZXx8dC5sb3dlckNhc2VUYWdzKSYmKG89by50b0xvd2VyQ2FzZSgpKSxmdW5jdGlvbihsKXtyZXR1cm4gaS5nZXROYW1lKGwpPT09byYmcihsKX19Y2FzZSBjZS5EZXNjZW5kYW50OntpZih0LmNhY2hlUmVzdWx0cz09PSExfHx0eXBlb2YgV2Vha1NldD4idSIpcmV0dXJuIGZ1bmN0aW9uKGwpe2xldCBBPWw7Zm9yKDtBPW9hKEEsaSk7KWlmKHIoQSkpcmV0dXJuITA7cmV0dXJuITF9O2NvbnN0IG89bmV3IFdlYWtTZXQ7cmV0dXJuIGZ1bmN0aW9uKGwpe2xldCBBPWw7Zm9yKDtBPW9hKEEsaSk7KWlmKCFvLmhhcyhBKSl7aWYoaS5pc1RhZyhBKSYmcihBKSlyZXR1cm4hMDtvLmFkZChBKX1yZXR1cm4hMX19Y2FzZSJfZmxleGlibGVEZXNjZW5kYW50IjpyZXR1cm4gZnVuY3Rpb24odSl7bGV0IGw9dTtkbyBpZihyKGwpKXJldHVybiEwO3doaWxlKGw9b2EobCxpKSk7cmV0dXJuITF9O2Nhc2UgY2UuUGFyZW50OnJldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gaS5nZXRDaGlsZHJlbih1KS5zb21lKGw9PmkuaXNUYWcobCkmJnIobCkpfTtjYXNlIGNlLkNoaWxkOnJldHVybiBmdW5jdGlvbih1KXtjb25zdCBsPWkuZ2V0UGFyZW50KHUpO3JldHVybiBsIT1udWxsJiZpLmlzVGFnKGwpJiZyKGwpfTtjYXNlIGNlLlNpYmxpbmc6cmV0dXJuIGZ1bmN0aW9uKHUpe2NvbnN0IGw9aS5nZXRTaWJsaW5ncyh1KTtmb3IobGV0IEE9MDtBPGwubGVuZ3RoO0ErKyl7Y29uc3QgZD1sW0FdO2lmKGEodSxkKSlicmVhaztpZihpLmlzVGFnKGQpJiZyKGQpKXJldHVybiEwfXJldHVybiExfTtjYXNlIGNlLkFkamFjZW50OnJldHVybiBpLnByZXZFbGVtZW50U2libGluZz9mdW5jdGlvbih1KXtjb25zdCBsPWkucHJldkVsZW1lbnRTaWJsaW5nKHUpO3JldHVybiBsIT1udWxsJiZyKGwpfTpmdW5jdGlvbih1KXtjb25zdCBsPWkuZ2V0U2libGluZ3ModSk7bGV0IEE7Zm9yKGxldCBkPTA7ZDxsLmxlbmd0aDtkKyspe2NvbnN0IGc9bFtkXTtpZihhKHUsZykpYnJlYWs7aS5pc1RhZyhnKSYmKEE9Zyl9cmV0dXJuISFBJiZyKEEpfTtjYXNlIGNlLlVuaXZlcnNhbDp7aWYoZS5uYW1lc3BhY2UhPW51bGwmJmUubmFtZXNwYWNlIT09IioiKXRocm93IG5ldyBFcnJvcigiTmFtZXNwYWNlZCB1bml2ZXJzYWwgc2VsZWN0b3JzIGFyZSBub3QgeWV0IHN1cHBvcnRlZCBieSBjc3Mtc2VsZWN0Iik7cmV0dXJuIHJ9fX1mdW5jdGlvbiBlYyhyLGUsdCl7Y29uc3Qgbj1QbShyLGUsdCk7cmV0dXJuICRsKG4sZS5hZGFwdGVyKX1mdW5jdGlvbiBQbShyLGUsdCl7Y29uc3Qgbj10eXBlb2Ygcj09InN0cmluZyI/S2wocik6cjtyZXR1cm4gcmMobixlLHQpfWZ1bmN0aW9uIHRjKHIpe3JldHVybiByLnR5cGU9PT1jZS5Qc2V1ZG8mJihyLm5hbWU9PT0ic2NvcGUifHxBcnJheS5pc0FycmF5KHIuZGF0YSkmJnIuZGF0YS5zb21lKGU9PmUuc29tZSh0YykpKX1jb25zdCBVbT17dHlwZTpjZS5EZXNjZW5kYW50fSxHbT17dHlwZToiX2ZsZXhpYmxlRGVzY2VuZGFudCJ9LEhtPXt0eXBlOmNlLlBzZXVkbyxuYW1lOiJzY29wZSIsZGF0YTpudWxsfTtmdW5jdGlvbiBRbShyLHthZGFwdGVyOmV9LHQpe2NvbnN0IG49ISF0Py5ldmVyeShzPT57Y29uc3QgaT1lLmlzVGFnKHMpJiZlLmdldFBhcmVudChzKTtyZXR1cm4gcz09PVhsfHxpJiZlLmlzVGFnKGkpfSk7Zm9yKGNvbnN0IHMgb2Ygcil7aWYoIShzLmxlbmd0aD4wJiZ0YShzWzBdKSYmc1swXS50eXBlIT09Y2UuRGVzY2VuZGFudCkpaWYobiYmIXMuc29tZSh0Yykpcy51bnNoaWZ0KFVtKTtlbHNlIGNvbnRpbnVlO3MudW5zaGlmdChIbSl9fWZ1bmN0aW9uIHJjKHIsZSx0KXt2YXIgbjtyLmZvckVhY2goSW0pLHQ9KG49ZS5jb250ZXh0KSE9PW51bGwmJm4hPT12b2lkIDA/bjp0O2NvbnN0IHM9QXJyYXkuaXNBcnJheSh0KSxpPXQmJihBcnJheS5pc0FycmF5KHQpP3Q6W3RdKTtpZihlLnJlbGF0aXZlU2VsZWN0b3IhPT0hMSlRbShyLGUsaSk7ZWxzZSBpZihyLnNvbWUodT0+dS5sZW5ndGg+MCYmdGEodVswXSkpKXRocm93IG5ldyBFcnJvcigiUmVsYXRpdmUgc2VsZWN0b3JzIGFyZSBub3QgYWxsb3dlZCB3aGVuIHRoZSBgcmVsYXRpdmVTZWxlY3RvcmAgb3B0aW9uIGlzIGRpc2FibGVkIik7bGV0IGE9ITE7Y29uc3Qgbz1yLm1hcCh1PT57aWYodS5sZW5ndGg+PTIpe2NvbnN0W2wsQV09dTtsLnR5cGUhPT1jZS5Qc2V1ZG98fGwubmFtZSE9PSJzY29wZSJ8fChzJiZBLnR5cGU9PT1jZS5EZXNjZW5kYW50P3VbMV09R206KEEudHlwZT09PWNlLkFkamFjZW50fHxBLnR5cGU9PT1jZS5TaWJsaW5nKSYmKGE9ITApKX1yZXR1cm4gV20odSxlLGkpfSkucmVkdWNlKEttLGdlLmZhbHNlRnVuYyk7cmV0dXJuIG8uc2hvdWxkVGVzdE5leHRTaWJsaW5ncz1hLG99ZnVuY3Rpb24gV20ocixlLHQpe3ZhciBuO3JldHVybiByLnJlZHVjZSgocyxpKT0+cz09PWdlLmZhbHNlRnVuYz9nZS5mYWxzZUZ1bmM6TG0ocyxpLGUsdCxyYyksKG49ZS5yb290RnVuYykhPT1udWxsJiZuIT09dm9pZCAwP246Z2UudHJ1ZUZ1bmMpfWZ1bmN0aW9uIEttKHIsZSl7cmV0dXJuIGU9PT1nZS5mYWxzZUZ1bmN8fHI9PT1nZS50cnVlRnVuYz9yOnI9PT1nZS5mYWxzZUZ1bmN8fGU9PT1nZS50cnVlRnVuYz9lOmZ1bmN0aW9uKG4pe3JldHVybiByKG4pfHxlKG4pfX1jb25zdCBuYz0ocixlKT0+cj09PWUsWW09e2FkYXB0ZXI6SGwsZXF1YWxzOm5jfTtmdW5jdGlvbiBzYyhyKXt2YXIgZSx0LG4scztjb25zdCBpPXI/P1ltO3JldHVybihlPWkuYWRhcHRlcikhPT1udWxsJiZlIT09dm9pZCAwfHwoaS5hZGFwdGVyPUhsKSwodD1pLmVxdWFscykhPT1udWxsJiZ0IT09dm9pZCAwfHwoaS5lcXVhbHM9KHM9KG49aS5hZGFwdGVyKT09PW51bGx8fG49PT12b2lkIDA/dm9pZCAwOm4uZXF1YWxzKSE9PW51bGwmJnMhPT12b2lkIDA/czpuYyksaX1mdW5jdGlvbiBabShyKXtyZXR1cm4gZnVuY3Rpb24odCxuLHMpe2NvbnN0IGk9c2Mobik7cmV0dXJuIHIodCxpLHMpfX1jb25zdCBWbT1abShlYyk7ZnVuY3Rpb24gem0ocixlLHQpe2NvbnN0IG49c2ModCk7cmV0dXJuKHR5cGVvZiBlPT0iZnVuY3Rpb24iP2U6ZWMoZSxuKSkocil9Y29uc3R7aXNBcnJheTpKbX09QXJyYXksTXM9KHtub2RlVHlwZTpyfSk9PnI9PT15ZSxpYz0ocixlKT0+ZS5zb21lKHQ9Pk1zKHQpJiYocih0KXx8aWMocix0bih0KSkpKSxxbT0ocixlKT0+ZT09PSJjbGFzcyI/ci5jbGFzc0xpc3QudmFsdWU6ci5nZXRBdHRyaWJ1dGUoZSksdG49KHtjaGlsZE5vZGVzOnJ9KT0+cixqbT1yPT57Y29uc3R7bG9jYWxOYW1lOmV9PXI7cmV0dXJuIGFyKHIpP2UudG9Mb3dlckNhc2UoKTplfSxYbT0oe3BhcmVudE5vZGU6cn0pPT5yLCRtPXI9Pntjb25zdHtwYXJlbnROb2RlOmV9PXI7cmV0dXJuIGU/dG4oZSk6cn0sdWE9cj0+Sm0ocik/ci5tYXAodWEpLmpvaW4oIiIpOk1zKHIpP3VhKHRuKHIpKTpyLm5vZGVUeXBlPT09WGU/ci5kYXRhOiIiLGUyPShyLGUpPT5yLmhhc0F0dHJpYnV0ZShlKSx0Mj1yPT57bGV0e2xlbmd0aDplfT1yO2Zvcig7ZS0tOyl7Y29uc3QgdD1yW2VdO2lmKGUmJi0xPHIubGFzdEluZGV4T2YodCxlLTEpKXtyLnNwbGljZShlLDEpO2NvbnRpbnVlfWZvcihsZXR7cGFyZW50Tm9kZTpufT10O247bj1uLnBhcmVudE5vZGUpaWYoci5pbmNsdWRlcyhuKSl7ci5zcGxpY2UoZSwxKTticmVha319cmV0dXJuIHJ9LGFjPShyLGUpPT57Y29uc3QgdD1bXTtmb3IoY29uc3QgbiBvZiBlKU1zKG4pJiYocihuKSYmdC5wdXNoKG4pLHQucHVzaCguLi5hYyhyLHRuKG4pKSkpO3JldHVybiB0fSxvYz0ocixlKT0+e2ZvcihsZXQgdCBvZiBlKWlmKHIodCl8fCh0PW9jKHIsdG4odCkpKSlyZXR1cm4gdDtyZXR1cm4gbnVsbH0sdWM9e2lzVGFnOk1zLGV4aXN0c09uZTppYyxnZXRBdHRyaWJ1dGVWYWx1ZTpxbSxnZXRDaGlsZHJlbjp0bixnZXROYW1lOmptLGdldFBhcmVudDpYbSxnZXRTaWJsaW5nczokbSxnZXRUZXh0OnVhLGhhc0F0dHJpYjplMixyZW1vdmVTdWJzZXRzOnQyLGZpbmRBbGw6YWMsZmluZE9uZTpvY30sbGE9KHIsZSk9PlZtKGUse2NvbnRleHQ6ZS5pbmNsdWRlcygiOnNjb3BlIik/cjp2b2lkIDAseG1sTW9kZTohYXIociksYWRhcHRlcjp1Y30pLHIyPShyLGUpPT56bShyLGUse3N0cmljdDohMCxjb250ZXh0OmUuaW5jbHVkZXMoIjpzY29wZSIpP3I6dm9pZCAwLHhtbE1vZGU6IWFyKHIpLGFkYXB0ZXI6dWN9KTtsZXQgUm49Y2xhc3MgQmggZXh0ZW5kcyBUbntjb25zdHJ1Y3RvcihlLHQ9IiIpe3N1cGVyKGUsIiN0ZXh0IixYZSx0KX1nZXQgd2hvbGVUZXh0KCl7Y29uc3QgZT1bXTtsZXR7cHJldmlvdXNTaWJsaW5nOnQsbmV4dFNpYmxpbmc6bn09dGhpcztmb3IoO3QmJnQubm9kZVR5cGU9PT1YZTspe2UudW5zaGlmdCh0W2tlXSk7dD10LnByZXZpb3VzU2libGluZ31mb3IoZS5wdXNoKHRoaXNba2VdKTtuJiZuLm5vZGVUeXBlPT09WGU7KXtlLnB1c2gobltrZV0pO249bi5uZXh0U2libGluZ31yZXR1cm4gZS5qb2luKCIiKX1jbG9uZU5vZGUoKXtjb25zdHtvd25lckRvY3VtZW50OmUsW2tlXTp0fT10aGlzO3JldHVybiBuZXcgQmgoZSx0KX10b1N0cmluZygpe3JldHVybiBLaSh0aGlzW2tlXSl9fTtjb25zdCBuMj1yPT5yIGluc3RhbmNlb2YgRXIsY2E9KHIsZSx0KT0+e2NvbnN0e293bmVyRG9jdW1lbnQ6bn09cjtmb3IoY29uc3QgcyBvZiB0KXIuaW5zZXJ0QmVmb3JlKG4yKHMpP3M6bmV3IFJuKG4scyksZSl9O2NsYXNzIGxjIGV4dGVuZHMgRXJ7Y29uc3RydWN0b3IoZSx0LG4pe3N1cGVyKGUsdCxuKSx0aGlzW2plXT1udWxsLHRoaXNbJF09dGhpc1tpZV09e1skXTpudWxsLFtZZV06dGhpcyxbYXRdOnRoaXMsbm9kZVR5cGU6aXIsb3duZXJEb2N1bWVudDp0aGlzLm93bmVyRG9jdW1lbnQscGFyZW50Tm9kZTpudWxsfX1nZXQgY2hpbGROb2Rlcygpe2NvbnN0IGU9bmV3IEZ0O2xldHtmaXJzdENoaWxkOnR9PXRoaXM7Zm9yKDt0OyllLnB1c2godCksdD15cih0KTtyZXR1cm4gZX1nZXQgY2hpbGRyZW4oKXtjb25zdCBlPW5ldyBGdDtsZXR7Zmlyc3RFbGVtZW50Q2hpbGQ6dH09dGhpcztmb3IoO3Q7KWUucHVzaCh0KSx0PVlpKHQpO3JldHVybiBlfWdldCBmaXJzdENoaWxkKCl7bGV0e1skXTplLFtpZV06dH09dGhpcztmb3IoO2Uubm9kZVR5cGU9PT1xZTspZT1lWyRdO3JldHVybiBlPT09dD9udWxsOmV9Z2V0IGZpcnN0RWxlbWVudENoaWxkKCl7bGV0e2ZpcnN0Q2hpbGQ6ZX09dGhpcztmb3IoO2U7KXtpZihlLm5vZGVUeXBlPT09eWUpcmV0dXJuIGU7ZT15cihlKX1yZXR1cm4gbnVsbH1nZXQgbGFzdENoaWxkKCl7Y29uc3QgZT10aGlzW2llXVtZZV07c3dpdGNoKGUubm9kZVR5cGUpe2Nhc2UgaXI6cmV0dXJuIGVbYXRdO2Nhc2UgcWU6cmV0dXJuIG51bGx9cmV0dXJuIGU9PT10aGlzP251bGw6ZX1nZXQgbGFzdEVsZW1lbnRDaGlsZCgpe2xldHtsYXN0Q2hpbGQ6ZX09dGhpcztmb3IoO2U7KXtpZihlLm5vZGVUeXBlPT09eWUpcmV0dXJuIGU7ZT14bihlKX1yZXR1cm4gbnVsbH1nZXQgY2hpbGRFbGVtZW50Q291bnQoKXtyZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGh9cHJlcGVuZCguLi5lKXtjYSh0aGlzLHRoaXMuZmlyc3RDaGlsZCxlKX1hcHBlbmQoLi4uZSl7Y2EodGhpcyx0aGlzW2llXSxlKX1yZXBsYWNlQ2hpbGRyZW4oLi4uZSl7bGV0e1skXTp0LFtpZV06bn09dGhpcztmb3IoO3QhPT1uJiZ0Lm5vZGVUeXBlPT09cWU7KXQ9dFskXTtmb3IoO3QhPT1uOyl7Y29uc3Qgcz11dCh0KVskXTt0LnJlbW92ZSgpLHQ9c31lLmxlbmd0aCYmY2EodGhpcyxuLGUpfWdldEVsZW1lbnRzQnlDbGFzc05hbWUoZSl7Y29uc3QgdD1uZXcgRnQ7bGV0e1skXTpuLFtpZV06c309dGhpcztmb3IoO24hPT1zOyluLm5vZGVUeXBlPT09eWUmJm4uaGFzQXR0cmlidXRlKCJjbGFzcyIpJiZuLmNsYXNzTGlzdC5oYXMoZSkmJnQucHVzaChuKSxuPW5bJF07cmV0dXJuIHR9Z2V0RWxlbWVudHNCeVRhZ05hbWUoZSl7Y29uc3QgdD1uZXcgRnQ7bGV0e1skXTpuLFtpZV06c309dGhpcztmb3IoO24hPT1zOyluLm5vZGVUeXBlPT09eWUmJihuLmxvY2FsTmFtZT09PWV8fFVpKG4pPT09ZSkmJnQucHVzaChuKSxuPW5bJF07cmV0dXJuIHR9cXVlcnlTZWxlY3RvcihlKXtjb25zdCB0PWxhKHRoaXMsZSk7bGV0e1skXTpuLFtpZV06c309dGhpcztmb3IoO24hPT1zOyl7aWYobi5ub2RlVHlwZT09PXllJiZ0KG4pKXJldHVybiBuO249bi5ub2RlVHlwZT09PXllJiZuLmxvY2FsTmFtZT09PSJ0ZW1wbGF0ZSI/bltpZV06blskXX1yZXR1cm4gbnVsbH1xdWVyeVNlbGVjdG9yQWxsKGUpe2NvbnN0IHQ9bGEodGhpcyxlKSxuPW5ldyBGdDtsZXR7WyRdOnMsW2llXTppfT10aGlzO2Zvcig7cyE9PWk7KXMubm9kZVR5cGU9PT15ZSYmdChzKSYmbi5wdXNoKHMpLHM9cy5ub2RlVHlwZT09PXllJiZzLmxvY2FsTmFtZT09PSJ0ZW1wbGF0ZSI/c1tpZV06c1skXTtyZXR1cm4gbn1hcHBlbmRDaGlsZChlKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoZSx0aGlzW2llXSl9Y29udGFpbnMoZSl7bGV0IHQ9ZTtmb3IoO3QmJnQhPT10aGlzOyl0PXQucGFyZW50Tm9kZTtyZXR1cm4gdD09PXRoaXN9aW5zZXJ0QmVmb3JlKGUsdD1udWxsKXtpZihlPT09dClyZXR1cm4gZTtpZihlPT09dGhpcyl0aHJvdyBuZXcgRXJyb3IoInVuYWJsZSB0byBhcHBlbmQgYSBub2RlIHRvIGl0c2VsZiIpO2NvbnN0IG49dHx8dGhpc1tpZV07c3dpdGNoKGUubm9kZVR5cGUpe2Nhc2UgeWU6ZS5yZW1vdmUoKSxlLnBhcmVudE5vZGU9dGhpcyxsbChuW1llXSxlLG4pLE5uKGUsbnVsbCksR2koZSk7YnJlYWs7Y2FzZSBZdDp7bGV0e1tqZV06cyxmaXJzdENoaWxkOmksbGFzdENoaWxkOmF9PWU7aWYoaSl7Y2wobltZZV0saSxhLG4pLEl0KGUsZVtpZV0pLHMmJnMucmVwbGFjZUNoaWxkcmVuKCk7ZG8gaS5wYXJlbnROb2RlPXRoaXMsTm4oaSxudWxsKSxpLm5vZGVUeXBlPT09eWUmJkdpKGkpO3doaWxlKGkhPT1hJiYoaT15cihpKSkpfWJyZWFrfWNhc2UgWGU6Y2FzZSBLdDpjYXNlIFJ0OmUucmVtb3ZlKCk7ZGVmYXVsdDplLnBhcmVudE5vZGU9dGhpcyx2cyhuW1llXSxlLG4pLE5uKGUsbnVsbCk7YnJlYWt9cmV0dXJuIGV9bm9ybWFsaXplKCl7bGV0e1skXTplLFtpZV06dH09dGhpcztmb3IoO2UhPT10Oyl7Y29uc3R7WyRdOm4sW1llXTpzLG5vZGVUeXBlOml9PWU7aT09PVhlJiYoZVtrZV0/cyYmcy5ub2RlVHlwZT09PVhlJiYocy50ZXh0Q29udGVudCs9ZS50ZXh0Q29udGVudCxlLnJlbW92ZSgpKTplLnJlbW92ZSgpKSxlPW59fXJlbW92ZUNoaWxkKGUpe2lmKGUucGFyZW50Tm9kZSE9PXRoaXMpdGhyb3cgbmV3IEVycm9yKCJub2RlIGlzIG5vdCBhIGNoaWxkIik7cmV0dXJuIGUucmVtb3ZlKCksZX1yZXBsYWNlQ2hpbGQoZSx0KXtjb25zdCBuPXV0KHQpWyRdO3JldHVybiB0LnJlbW92ZSgpLHRoaXMuaW5zZXJ0QmVmb3JlKGUsbiksdH19Y2xhc3MgaGEgZXh0ZW5kcyBsY3tnZXRFbGVtZW50QnlJZChlKXtsZXR7WyRdOnQsW2llXTpufT10aGlzO2Zvcig7dCE9PW47KXtpZih0Lm5vZGVUeXBlPT09eWUmJnQuaWQ9PT1lKXJldHVybiB0O3Q9dFskXX1yZXR1cm4gbnVsbH1jbG9uZU5vZGUoZSl7Y29uc3R7b3duZXJEb2N1bWVudDp0LGNvbnN0cnVjdG9yOm59PXRoaXMscz1uZXcgbih0KTtpZihlKXtjb25zdHtbaWVdOml9PXM7Zm9yKGNvbnN0IGEgb2YgdGhpcy5jaGlsZE5vZGVzKXMuaW5zZXJ0QmVmb3JlKGEuY2xvbmVOb2RlKGUpLGkpfXJldHVybiBzfXRvU3RyaW5nKCl7Y29uc3R7Y2hpbGROb2RlczplLGxvY2FsTmFtZTp0fT10aGlzO3JldHVybmA8JHt0fT4ke2Uuam9pbigiIil9PC8ke3R9PmB9dG9KU09OKCl7Y29uc3QgZT1bXTtyZXR1cm4gRmcodGhpcyxlKSxlfX1sZXQgQWE9Y2xhc3MgZXh0ZW5kcyBoYXtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCIjZG9jdW1lbnQtZnJhZ21lbnQiLFl0KX19LE9zPWNsYXNzIF9oIGV4dGVuZHMgRXJ7Y29uc3RydWN0b3IoZSx0LG49IiIscz0iIil7c3VwZXIoZSwiI2RvY3VtZW50LXR5cGUiLGpyKSx0aGlzLm5hbWU9dCx0aGlzLnB1YmxpY0lkPW4sdGhpcy5zeXN0ZW1JZD1zfWNsb25lTm9kZSgpe2NvbnN0e293bmVyRG9jdW1lbnQ6ZSxuYW1lOnQscHVibGljSWQ6bixzeXN0ZW1JZDpzfT10aGlzO3JldHVybiBuZXcgX2goZSx0LG4scyl9dG9TdHJpbmcoKXtjb25zdHtuYW1lOmUscHVibGljSWQ6dCxzeXN0ZW1JZDpufT10aGlzLHM9MDx0Lmxlbmd0aCxpPVtlXTtyZXR1cm4gcyYmaS5wdXNoKCJQVUJMSUMiLGAiJHt0fSJgKSxuLmxlbmd0aCYmKHN8fGkucHVzaCgiU1lTVEVNIiksaS5wdXNoKGAiJHtufSJgKSksYDwhRE9DVFlQRSAke2kuam9pbigiICIpfT5gfXRvSlNPTigpe2NvbnN0IGU9W107cmV0dXJuIFNsKHRoaXMsZSksZX19O2NvbnN0IGNjPXI9PnIuY2hpbGROb2Rlcy5qb2luKCIiKSxoYz0ocixlKT0+e2NvbnN0e293bmVyRG9jdW1lbnQ6dH09cix7Y29uc3RydWN0b3I6bn09dCxzPW5ldyBuO3NbeXRdPXRbeXRdO2NvbnN0e2NoaWxkTm9kZXM6aX09Z2wocyxhcihyKSxlKTtyLnJlcGxhY2VDaGlsZHJlbiguLi5pLm1hcChBYyx0KSl9O2Z1bmN0aW9uIEFjKHIpe3N3aXRjaChyLm93bmVyRG9jdW1lbnQ9dGhpcyxyLm5vZGVUeXBlKXtjYXNlIHllOmNhc2UgWXQ6ci5jaGlsZE5vZGVzLmZvckVhY2goQWMsdGhpcyk7YnJlYWt9cmV0dXJuIHJ9dmFyIExzPXI9PnIucmVwbGFjZSgvKChbQS1aMC05XSkoW0EtWjAtOV1bYS16XSkpfCgoW2EtejAtOV0rKShbQS1aXSkpL2csIiQyJDUtJDMkNiIpLnRvTG93ZXJDYXNlKCk7Y29uc3QgUHM9bmV3IFdlYWtNYXAsZGE9cj0+YGRhdGEtJHtMcyhyKX1gLHMyPXI9PnIuc2xpY2UoNSkucmVwbGFjZSgvLShbYS16XSkvZywoZSx0KT0+dC50b1VwcGVyQ2FzZSgpKSxpMj17Z2V0KHIsZSl7aWYoZSBpbiByKXJldHVybiBQcy5nZXQocikuZ2V0QXR0cmlidXRlKGRhKGUpKX0sc2V0KHIsZSx0KXtyZXR1cm4gcltlXT10LFBzLmdldChyKS5zZXRBdHRyaWJ1dGUoZGEoZSksdCksITB9LGRlbGV0ZVByb3BlcnR5KHIsZSl7cmV0dXJuIGUgaW4gciYmUHMuZ2V0KHIpLnJlbW92ZUF0dHJpYnV0ZShkYShlKSksZGVsZXRlIHJbZV19fTtjbGFzcyBkY3tjb25zdHJ1Y3RvcihlKXtmb3IoY29uc3R7bmFtZTp0LHZhbHVlOm59b2YgZS5hdHRyaWJ1dGVzKS9eZGF0YS0vLnRlc3QodCkmJih0aGlzW3MyKHQpXT1uKTtyZXR1cm4gUHMuc2V0KHRoaXMsZSksbmV3IFByb3h5KHRoaXMsaTIpfX1ydChkYy5wcm90b3R5cGUsbnVsbCk7Y29uc3R7YWRkOmEyfT1TZXQucHJvdG90eXBlLGZjPShyLGUpPT57Zm9yKGNvbnN0IHQgb2YgZSl0JiZhMi5jYWxsKHIsdCl9LEZuPSh7W1N1XTpyLHZhbHVlOmV9KT0+e2NvbnN0IHQ9ci5nZXRBdHRyaWJ1dGVOb2RlKCJjbGFzcyIpO3Q/dC52YWx1ZT1lOlFpKHIsbmV3IGtuKHIub3duZXJEb2N1bWVudCwiY2xhc3MiLGUpKX07Y2xhc3MgbzIgZXh0ZW5kcyBTZXR7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzW1N1XT1lO2NvbnN0IHQ9ZS5nZXRBdHRyaWJ1dGVOb2RlKCJjbGFzcyIpO3QmJmZjKHRoaXMsdC52YWx1ZS5zcGxpdCgvXHMrLykpfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5zaXplfWdldCB2YWx1ZSgpe3JldHVyblsuLi50aGlzXS5qb2luKCIgIil9YWRkKC4uLmUpe2ZjKHRoaXMsZSksRm4odGhpcyl9Y29udGFpbnMoZSl7cmV0dXJuIHRoaXMuaGFzKGUpfXJlbW92ZSguLi5lKXtmb3IoY29uc3QgdCBvZiBlKXRoaXMuZGVsZXRlKHQpO0ZuKHRoaXMpfXRvZ2dsZShlLHQpe2lmKHRoaXMuaGFzKGUpKXtpZih0KXJldHVybiEwO3RoaXMuZGVsZXRlKGUpLEZuKHRoaXMpfWVsc2UgaWYodHx8YXJndW1lbnRzLmxlbmd0aD09PTEpcmV0dXJuIHN1cGVyLmFkZChlKSxGbih0aGlzKSwhMDtyZXR1cm4hMX1yZXBsYWNlKGUsdCl7cmV0dXJuIHRoaXMuaGFzKGUpPyh0aGlzLmRlbGV0ZShlKSxzdXBlci5hZGQodCksRm4odGhpcyksITApOiExfXN1cHBvcnRzKCl7cmV0dXJuITB9fWNvbnN0IFVzPW5ldyBXZWFrTWFwLGZhPXI9PlsuLi5yLmtleXMoKV0uZmlsdGVyKGU9PmUhPT1qZSksR3M9cj0+e2NvbnN0IGU9VXMuZ2V0KHIpLmdldEF0dHJpYnV0ZU5vZGUoInN0eWxlIik7aWYoKCFlfHxlW2hzXXx8ci5nZXQoamUpIT09ZSkmJihyLmNsZWFyKCksZSkpe3Iuc2V0KGplLGUpO2Zvcihjb25zdCB0IG9mIGVba2VdLnNwbGl0KC9ccyo7XHMqLykpe2xldFtuLC4uLnNdPXQuc3BsaXQoIjoiKTtpZihzLmxlbmd0aD4wKXtuPW4udHJpbSgpO2NvbnN0IGk9cy5qb2luKCI6IikudHJpbSgpO24mJmkmJnIuc2V0KG4saSl9fX1yZXR1cm4gZX0sSHM9e2dldChyLGUpe3JldHVybiBlIGluIHUyP3JbZV06KEdzKHIpLGU9PT0ibGVuZ3RoIj9mYShyKS5sZW5ndGg6L15cZCskLy50ZXN0KGUpP2ZhKHIpW2VdOnIuZ2V0KExzKGUpKSl9LHNldChyLGUsdCl7aWYoZT09PSJjc3NUZXh0IilyW2VdPXQ7ZWxzZXtsZXQgbj1HcyhyKTtpZih0PT1udWxsP3IuZGVsZXRlKExzKGUpKTpyLnNldChMcyhlKSx0KSwhbil7Y29uc3Qgcz1Vcy5nZXQocik7bj1zLm93bmVyRG9jdW1lbnQuY3JlYXRlQXR0cmlidXRlKCJzdHlsZSIpLHMuc2V0QXR0cmlidXRlTm9kZShuKSxyLnNldChqZSxuKX1uW2hzXT0hMSxuW2tlXT1yLnRvU3RyaW5nKCl9cmV0dXJuITB9fTtsZXQgcGM9Y2xhc3MgZXh0ZW5kcyBNYXB7Y29uc3RydWN0b3IoZSl7cmV0dXJuIHN1cGVyKCksVXMuc2V0KHRoaXMsZSksbmV3IFByb3h5KHRoaXMsSHMpfWdldCBjc3NUZXh0KCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoKX1zZXQgY3NzVGV4dChlKXtVcy5nZXQodGhpcykuc2V0QXR0cmlidXRlKCJzdHlsZSIsZSl9Z2V0UHJvcGVydHlWYWx1ZShlKXtjb25zdCB0PXRoaXNbamVdO3JldHVybiBIcy5nZXQodCxlKX1zZXRQcm9wZXJ0eShlLHQpe2NvbnN0IG49dGhpc1tqZV07SHMuc2V0KG4sZSx0KX1yZW1vdmVQcm9wZXJ0eShlKXtjb25zdCB0PXRoaXNbamVdO0hzLnNldCh0LGUsbnVsbCl9W1N5bWJvbC5pdGVyYXRvcl0oKXtjb25zdCBlPXRoaXNbamVdO0dzKGUpO2NvbnN0IHQ9ZmEoZSkse2xlbmd0aDpufT10O2xldCBzPTA7cmV0dXJue25leHQoKXtjb25zdCBpPXM9PT1uO3JldHVybntkb25lOmksdmFsdWU6aT9udWxsOnRbcysrXX19fX1nZXRbamVdKCl7cmV0dXJuIHRoaXN9dG9TdHJpbmcoKXtjb25zdCBlPXRoaXNbamVdO0dzKGUpO2NvbnN0IHQ9W107cmV0dXJuIGUuZm9yRWFjaChsMix0KSx0LmpvaW4oIjsiKX19O2NvbnN0e3Byb3RvdHlwZTp1Mn09cGM7ZnVuY3Rpb24gbDIocixlKXtlIT09amUmJnRoaXMucHVzaChgJHtlfToke3J9YCl9Y29uc3QgZ2M9MyxtYz0yLGJjPTEsQ2M9MDtmdW5jdGlvbiBjMihyKXtyZXR1cm4gci5jdXJyZW50VGFyZ2V0fWNsYXNzIERye3N0YXRpYyBnZXQgQlVCQkxJTkdfUEhBU0UoKXtyZXR1cm4gZ2N9c3RhdGljIGdldCBBVF9UQVJHRVQoKXtyZXR1cm4gbWN9c3RhdGljIGdldCBDQVBUVVJJTkdfUEhBU0UoKXtyZXR1cm4gYmN9c3RhdGljIGdldCBOT05FKCl7cmV0dXJuIENjfWNvbnN0cnVjdG9yKGUsdD17fSl7dGhpcy50eXBlPWUsdGhpcy5idWJibGVzPSEhdC5idWJibGVzLHRoaXMuY2FuY2VsQnViYmxlPSExLHRoaXMuX3N0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbkZsYWc9ITEsdGhpcy5jYW5jZWxhYmxlPSEhdC5jYW5jZWxhYmxlLHRoaXMuZXZlbnRQaGFzZT10aGlzLk5PTkUsdGhpcy50aW1lU3RhbXA9RGF0ZS5ub3coKSx0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITEsdGhpcy5vcmlnaW5hbFRhcmdldD1udWxsLHRoaXMucmV0dXJuVmFsdWU9bnVsbCx0aGlzLnNyY0VsZW1lbnQ9bnVsbCx0aGlzLnRhcmdldD1udWxsLHRoaXMuX3BhdGg9W119Z2V0IEJVQkJMSU5HX1BIQVNFKCl7cmV0dXJuIGdjfWdldCBBVF9UQVJHRVQoKXtyZXR1cm4gbWN9Z2V0IENBUFRVUklOR19QSEFTRSgpe3JldHVybiBiY31nZXQgTk9ORSgpe3JldHVybiBDY31wcmV2ZW50RGVmYXVsdCgpe3RoaXMuZGVmYXVsdFByZXZlbnRlZD0hMH1jb21wb3NlZFBhdGgoKXtyZXR1cm4gdGhpcy5fcGF0aC5tYXAoYzIpfXN0b3BQcm9wYWdhdGlvbigpe3RoaXMuY2FuY2VsQnViYmxlPSEwfXN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpe3RoaXMuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5fc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uRmxhZz0hMH19Y2xhc3MgU2MgZXh0ZW5kcyBBcnJheXtjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMub3duZXJFbGVtZW50PWV9Z2V0TmFtZWRJdGVtKGUpe3JldHVybiB0aGlzLm93bmVyRWxlbWVudC5nZXRBdHRyaWJ1dGVOb2RlKGUpfXNldE5hbWVkSXRlbShlKXt0aGlzLm93bmVyRWxlbWVudC5zZXRBdHRyaWJ1dGVOb2RlKGUpLHRoaXMudW5zaGlmdChlKX1yZW1vdmVOYW1lZEl0ZW0oZSl7Y29uc3QgdD10aGlzLmdldE5hbWVkSXRlbShlKTt0aGlzLm93bmVyRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoZSksdGhpcy5zcGxpY2UodGhpcy5pbmRleE9mKHQpLDEpfWl0ZW0oZSl7cmV0dXJuIGU8dGhpcy5sZW5ndGg/dGhpc1tlXTpudWxsfWdldE5hbWVkSXRlbU5TKGUsdCl7cmV0dXJuIHRoaXMuZ2V0TmFtZWRJdGVtKHQpfXNldE5hbWVkSXRlbU5TKGUsdCl7cmV0dXJuIHRoaXMuc2V0TmFtZWRJdGVtKHQpfXJlbW92ZU5hbWVkSXRlbU5TKGUsdCl7cmV0dXJuIHRoaXMucmVtb3ZlTmFtZWRJdGVtKHQpfX1sZXQgcGE9Y2xhc3MgZXh0ZW5kcyBoYXtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLm93bmVyRG9jdW1lbnQsIiNzaGFkb3ctcm9vdCIsWXQpLHRoaXMuaG9zdD1lfWdldCBpbm5lckhUTUwoKXtyZXR1cm4gY2ModGhpcyl9c2V0IGlubmVySFRNTChlKXtoYyh0aGlzLGUpfX07Y29uc3QgaDI9e2dldChyLGUpe3JldHVybiBlIGluIHI/cltlXTpyLmZpbmQoKHtuYW1lOnR9KT0+dD09PWUpfX0sRWM9KHIsZSx0KT0+e2lmKCJvd25lclNWR0VsZW1lbnQiaW4gZSl7Y29uc3Qgbj1yLmNyZWF0ZUVsZW1lbnROUyh5cyx0KTtyZXR1cm4gbi5vd25lclNWR0VsZW1lbnQ9ZS5vd25lclNWR0VsZW1lbnQsbn1yZXR1cm4gci5jcmVhdGVFbGVtZW50KHQpfSxBMj0oe2xvY2FsTmFtZTpyLG93bmVyRG9jdW1lbnQ6ZX0pPT5lW1ZyXS52b2lkRWxlbWVudHMudGVzdChyKTtsZXQgTW49Y2xhc3MgZXh0ZW5kcyBsY3tjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsdCx5ZSksdGhpc1tacl09bnVsbCx0aGlzW3ZpXT1udWxsLHRoaXNbRGldPW51bGx9Z2V0IGlzQ29ubmVjdGVkKCl7cmV0dXJuIElsKHRoaXMpfWdldCBwYXJlbnRFbGVtZW50KCl7cmV0dXJuIE5sKHRoaXMpfWdldCBwcmV2aW91c1NpYmxpbmcoKXtyZXR1cm4geG4odGhpcyl9Z2V0IG5leHRTaWJsaW5nKCl7cmV0dXJuIHlyKHRoaXMpfWdldCBuYW1lc3BhY2VVUkkoKXtyZXR1cm4iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCJ9Z2V0IHByZXZpb3VzRWxlbWVudFNpYmxpbmcoKXtyZXR1cm4ga2wodGhpcyl9Z2V0IG5leHRFbGVtZW50U2libGluZygpe3JldHVybiBZaSh0aGlzKX1iZWZvcmUoLi4uZSl7eGwodGhpcyxlKX1hZnRlciguLi5lKXtUbCh0aGlzLGUpfXJlcGxhY2VXaXRoKC4uLmUpe1ZpKHRoaXMsZSl9cmVtb3ZlKCl7QmwodGhpc1tZZV0sdGhpcyx0aGlzW2llXVskXSl9Z2V0IGlkKCl7cmV0dXJuIHouZ2V0KHRoaXMsImlkIil9c2V0IGlkKGUpe3ouc2V0KHRoaXMsImlkIixlKX1nZXQgY2xhc3NOYW1lKCl7cmV0dXJuIHRoaXMuY2xhc3NMaXN0LnZhbHVlfXNldCBjbGFzc05hbWUoZSl7Y29uc3R7Y2xhc3NMaXN0OnR9PXRoaXM7dC5jbGVhcigpLHQuYWRkKC4uLmJyKGUpLnNwbGl0KC9ccysvKSl9Z2V0IG5vZGVOYW1lKCl7cmV0dXJuIFVpKHRoaXMpfWdldCB0YWdOYW1lKCl7cmV0dXJuIFVpKHRoaXMpfWdldCBjbGFzc0xpc3QoKXtyZXR1cm4gdGhpc1tacl18fCh0aGlzW1pyXT1uZXcgbzIodGhpcykpfWdldCBkYXRhc2V0KCl7cmV0dXJuIHRoaXNbdmldfHwodGhpc1t2aV09bmV3IGRjKHRoaXMpKX1nZXRCb3VuZGluZ0NsaWVudFJlY3QoKXtyZXR1cm57eDowLHk6MCxib3R0b206MCxoZWlnaHQ6MCxsZWZ0OjAscmlnaHQ6MCx0b3A6MCx3aWR0aDowfX1nZXQgbm9uY2UoKXtyZXR1cm4gei5nZXQodGhpcywibm9uY2UiKX1zZXQgbm9uY2UoZSl7ei5zZXQodGhpcywibm9uY2UiLGUpfWdldCBzdHlsZSgpe3JldHVybiB0aGlzW0RpXXx8KHRoaXNbRGldPW5ldyBwYyh0aGlzKSl9Z2V0IHRhYkluZGV4KCl7cmV0dXJuIHVyLmdldCh0aGlzLCJ0YWJpbmRleCIpfHwtMX1zZXQgdGFiSW5kZXgoZSl7dXIuc2V0KHRoaXMsInRhYmluZGV4IixlKX1nZXQgc2xvdCgpe3JldHVybiB6LmdldCh0aGlzLCJzbG90Iil9c2V0IHNsb3QoZSl7ei5zZXQodGhpcywic2xvdCIsZSl9Z2V0IGlubmVyVGV4dCgpe2NvbnN0IGU9W107bGV0e1skXTp0LFtpZV06bn09dGhpcztmb3IoO3QhPT1uOyl0Lm5vZGVUeXBlPT09WGU/ZS5wdXNoKHQudGV4dENvbnRlbnQucmVwbGFjZSgvXHMrL2csIiAiKSk6ZS5sZW5ndGgmJnRbJF0hPW4mJnBnLmhhcyh0LnRhZ05hbWUpJiZlLnB1c2goYApgKSx0PXRbJF07cmV0dXJuIGUuam9pbigiIil9Z2V0IHRleHRDb250ZW50KCl7Y29uc3QgZT1bXTtsZXR7WyRdOnQsW2llXTpufT10aGlzO2Zvcig7dCE9PW47KXtjb25zdCBzPXQubm9kZVR5cGU7KHM9PT1YZXx8cz09PVJ0KSYmZS5wdXNoKHQudGV4dENvbnRlbnQpLHQ9dFskXX1yZXR1cm4gZS5qb2luKCIiKX1zZXQgdGV4dENvbnRlbnQoZSl7dGhpcy5yZXBsYWNlQ2hpbGRyZW4oKSxlIT1udWxsJiZlIT09IiImJnRoaXMuYXBwZW5kQ2hpbGQobmV3IFJuKHRoaXMub3duZXJEb2N1bWVudCxlKSl9Z2V0IGlubmVySFRNTCgpe3JldHVybiBjYyh0aGlzKX1zZXQgaW5uZXJIVE1MKGUpe2hjKHRoaXMsZSl9Z2V0IG91dGVySFRNTCgpe3JldHVybiB0aGlzLnRvU3RyaW5nKCl9c2V0IG91dGVySFRNTChlKXtjb25zdCB0PXRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCIiKTt0LmlubmVySFRNTD1lLHRoaXMucmVwbGFjZVdpdGgoLi4udC5jaGlsZE5vZGVzKX1nZXQgYXR0cmlidXRlcygpe2NvbnN0IGU9bmV3IFNjKHRoaXMpO2xldCB0PXRoaXNbJF07Zm9yKDt0Lm5vZGVUeXBlPT09cWU7KWUucHVzaCh0KSx0PXRbJF07cmV0dXJuIG5ldyBQcm94eShlLGgyKX1mb2N1cygpe3RoaXMuZGlzcGF0Y2hFdmVudChuZXcgRHIoImZvY3VzIikpfWdldEF0dHJpYnV0ZShlKXtpZihlPT09ImNsYXNzIilyZXR1cm4gdGhpcy5jbGFzc05hbWU7Y29uc3QgdD10aGlzLmdldEF0dHJpYnV0ZU5vZGUoZSk7cmV0dXJuIHQmJihhcih0aGlzKT90LnZhbHVlOktpKHQudmFsdWUpKX1nZXRBdHRyaWJ1dGVOb2RlKGUpe2xldCB0PXRoaXNbJF07Zm9yKDt0Lm5vZGVUeXBlPT09cWU7KXtpZih0Lm5hbWU9PT1lKXJldHVybiB0O3Q9dFskXX1yZXR1cm4gbnVsbH1nZXRBdHRyaWJ1dGVOYW1lcygpe2NvbnN0IGU9bmV3IEZ0O2xldCB0PXRoaXNbJF07Zm9yKDt0Lm5vZGVUeXBlPT09cWU7KWUucHVzaCh0Lm5hbWUpLHQ9dFskXTtyZXR1cm4gZX1oYXNBdHRyaWJ1dGUoZSl7cmV0dXJuISF0aGlzLmdldEF0dHJpYnV0ZU5vZGUoZSl9aGFzQXR0cmlidXRlcygpe3JldHVybiB0aGlzWyRdLm5vZGVUeXBlPT09cWV9cmVtb3ZlQXR0cmlidXRlKGUpe2U9PT0iY2xhc3MiJiZ0aGlzW1pyXSYmdGhpc1tacl0uY2xlYXIoKTtsZXQgdD10aGlzWyRdO2Zvcig7dC5ub2RlVHlwZT09PXFlOyl7aWYodC5uYW1lPT09ZSl7d2wodGhpcyx0KTtyZXR1cm59dD10WyRdfX1yZW1vdmVBdHRyaWJ1dGVOb2RlKGUpe2xldCB0PXRoaXNbJF07Zm9yKDt0Lm5vZGVUeXBlPT09cWU7KXtpZih0PT09ZSl7d2wodGhpcyx0KTtyZXR1cm59dD10WyRdfX1zZXRBdHRyaWJ1dGUoZSx0KXtpZihlPT09ImNsYXNzIil0aGlzLmNsYXNzTmFtZT10O2Vsc2V7Y29uc3Qgbj10aGlzLmdldEF0dHJpYnV0ZU5vZGUoZSk7bj9uLnZhbHVlPXQ6UWkodGhpcyxuZXcga24odGhpcy5vd25lckRvY3VtZW50LGUsdCkpfX1zZXRBdHRyaWJ1dGVOb2RlKGUpe2NvbnN0e25hbWU6dH09ZSxuPXRoaXMuZ2V0QXR0cmlidXRlTm9kZSh0KTtpZihuIT09ZSl7biYmdGhpcy5yZW1vdmVBdHRyaWJ1dGVOb2RlKG4pO2NvbnN0e293bmVyRWxlbWVudDpzfT1lO3MmJnMucmVtb3ZlQXR0cmlidXRlTm9kZShlKSxRaSh0aGlzLGUpfXJldHVybiBufXRvZ2dsZUF0dHJpYnV0ZShlLHQpe3JldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShlKT90PyEwOih0aGlzLnJlbW92ZUF0dHJpYnV0ZShlKSwhMSk6dHx8YXJndW1lbnRzLmxlbmd0aD09PTE/KHRoaXMuc2V0QXR0cmlidXRlKGUsIiIpLCEwKTohMX1nZXQgc2hhZG93Um9vdCgpe2lmKG9yLmhhcyh0aGlzKSl7Y29uc3R7bW9kZTplLHNoYWRvd1Jvb3Q6dH09b3IuZ2V0KHRoaXMpO2lmKGU9PT0ib3BlbiIpcmV0dXJuIHR9cmV0dXJuIG51bGx9YXR0YWNoU2hhZG93KGUpe2lmKG9yLmhhcyh0aGlzKSl0aHJvdyBuZXcgRXJyb3IoIm9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIik7Y29uc3QgdD1uZXcgcGEodGhpcyk7cmV0dXJuIG9yLnNldCh0aGlzLHttb2RlOmUubW9kZSxzaGFkb3dSb290OnR9KSx0fW1hdGNoZXMoZSl7cmV0dXJuIHIyKHRoaXMsZSl9Y2xvc2VzdChlKXtsZXQgdD10aGlzO2NvbnN0IG49bGEodCxlKTtmb3IoO3QmJiFuKHQpOyl0PXQucGFyZW50RWxlbWVudDtyZXR1cm4gdH1pbnNlcnRBZGphY2VudEVsZW1lbnQoZSx0KXtjb25zdHtwYXJlbnRFbGVtZW50Om59PXRoaXM7c3dpdGNoKGUpe2Nhc2UiYmVmb3JlYmVnaW4iOmlmKG4pe24uaW5zZXJ0QmVmb3JlKHQsdGhpcyk7YnJlYWt9cmV0dXJuIG51bGw7Y2FzZSJhZnRlcmJlZ2luIjp0aGlzLmluc2VydEJlZm9yZSh0LHRoaXMuZmlyc3RDaGlsZCk7YnJlYWs7Y2FzZSJiZWZvcmVlbmQiOnRoaXMuaW5zZXJ0QmVmb3JlKHQsbnVsbCk7YnJlYWs7Y2FzZSJhZnRlcmVuZCI6aWYobil7bi5pbnNlcnRCZWZvcmUodCx0aGlzLm5leHRTaWJsaW5nKTticmVha31yZXR1cm4gbnVsbH1yZXR1cm4gdH1pbnNlcnRBZGphY2VudEhUTUwoZSx0KXt0aGlzLmluc2VydEFkamFjZW50RWxlbWVudChlLEFsKHRoaXMub3duZXJEb2N1bWVudCx0KSl9aW5zZXJ0QWRqYWNlbnRUZXh0KGUsdCl7Y29uc3Qgbj10aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodCk7dGhpcy5pbnNlcnRBZGphY2VudEVsZW1lbnQoZSxuKX1jbG9uZU5vZGUoZT0hMSl7Y29uc3R7b3duZXJEb2N1bWVudDp0LGxvY2FsTmFtZTpufT10aGlzLHM9QT0+e0EucGFyZW50Tm9kZT1hLEl0KG8sQSksbz1BfSxpPUVjKHQsdGhpcyxuKTtsZXQgYT1pLG89aSx7WyRdOnUsW2llXTpsfT10aGlzO2Zvcig7dSE9PWwmJihlfHx1Lm5vZGVUeXBlPT09cWUpOyl7c3dpdGNoKHUubm9kZVR5cGUpe2Nhc2UgaXI6SXQobyxhW2llXSksbz1hW2llXSxhPWEucGFyZW50Tm9kZTticmVhaztjYXNlIHllOntjb25zdCBBPUVjKHQsdSx1LmxvY2FsTmFtZSk7cyhBKSxhPUE7YnJlYWt9Y2FzZSBxZTp7Y29uc3QgQT11LmNsb25lTm9kZShlKTtBLm93bmVyRWxlbWVudD1hLHMoQSk7YnJlYWt9Y2FzZSBYZTpjYXNlIEt0OmNhc2UgUnQ6cyh1LmNsb25lTm9kZShlKSk7YnJlYWt9dT11WyRdfXJldHVybiBJdChvLGlbaWVdKSxpfXRvU3RyaW5nKCl7Y29uc3QgZT1bXSx7W2llXTp0fT10aGlzO2xldCBuPXtbJF06dGhpc30scz0hMTtkbyBzd2l0Y2gobj1uWyRdLG4ubm9kZVR5cGUpe2Nhc2UgcWU6e2NvbnN0IGk9IiAiK247c3dpdGNoKGkpe2Nhc2UiIGlkIjpjYXNlIiBjbGFzcyI6Y2FzZSIgc3R5bGUiOmJyZWFrO2RlZmF1bHQ6ZS5wdXNoKGkpfWJyZWFrfWNhc2UgaXI6e2NvbnN0IGk9blthdF07cz8oIm93bmVyU1ZHRWxlbWVudCJpbiBpP2UucHVzaCgiIC8+Iik6QTIoaSk/ZS5wdXNoKGFyKGkpPyI+IjoiIC8+Iik6ZS5wdXNoKGA+PC8ke2kubG9jYWxOYW1lfT5gKSxzPSExKTplLnB1c2goYDwvJHtpLmxvY2FsTmFtZX0+YCk7YnJlYWt9Y2FzZSB5ZTpzJiZlLnB1c2goIj4iKSxuLnRvU3RyaW5nIT09dGhpcy50b1N0cmluZz8oZS5wdXNoKG4udG9TdHJpbmcoKSksbj1uW2llXSxzPSExKTooZS5wdXNoKGA8JHtuLmxvY2FsTmFtZX1gKSxzPSEwKTticmVhaztjYXNlIFhlOmNhc2UgS3Q6Y2FzZSBSdDplLnB1c2goKHM/Ij4iOiIiKStuKSxzPSExO2JyZWFrfXdoaWxlKG4hPT10KTtyZXR1cm4gZS5qb2luKCIiKX10b0pTT04oKXtjb25zdCBlPVtdO3JldHVybiBFbCh0aGlzLGUpLGV9Z2V0QXR0cmlidXRlTlMoZSx0KXtyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUodCl9Z2V0RWxlbWVudHNCeVRhZ05hbWVOUyhlLHQpe3JldHVybiB0aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKHQpfWhhc0F0dHJpYnV0ZU5TKGUsdCl7cmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKHQpfXJlbW92ZUF0dHJpYnV0ZU5TKGUsdCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9c2V0QXR0cmlidXRlTlMoZSx0LG4pe3RoaXMuc2V0QXR0cmlidXRlKHQsbil9c2V0QXR0cmlidXRlTm9kZU5TKGUpe3JldHVybiB0aGlzLnNldEF0dHJpYnV0ZU5vZGUoZSl9fTtjb25zdCBnYT1uZXcgV2Vha01hcCxkMj17Z2V0KHIsZSl7cmV0dXJuIHJbZV19LHNldChyLGUsdCl7cmV0dXJuIHJbZV09dCwhMH19O2xldCBPbj1jbGFzcyBleHRlbmRzIE1ue2NvbnN0cnVjdG9yKGUsdCxuPW51bGwpe3N1cGVyKGUsdCksdGhpcy5vd25lclNWR0VsZW1lbnQ9bn1nZXQgY2xhc3NOYW1lKCl7cmV0dXJuIGdhLmhhcyh0aGlzKXx8Z2Euc2V0KHRoaXMsbmV3IFByb3h5KHtiYXNlVmFsOiIiLGFuaW1WYWw6IiJ9LGQyKSksZ2EuZ2V0KHRoaXMpfXNldCBjbGFzc05hbWUoZSl7Y29uc3R7Y2xhc3NMaXN0OnR9PXRoaXM7dC5jbGVhcigpLHQuYWRkKC4uLmJyKGUpLnNwbGl0KC9ccysvKSl9Z2V0IG5hbWVzcGFjZVVSSSgpe3JldHVybiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyJ9Z2V0QXR0cmlidXRlKGUpe3JldHVybiBlPT09ImNsYXNzIj9bLi4udGhpcy5jbGFzc0xpc3RdLmpvaW4oIiAiKTpzdXBlci5nZXRBdHRyaWJ1dGUoZSl9c2V0QXR0cmlidXRlKGUsdCl7aWYoZT09PSJjbGFzcyIpdGhpcy5jbGFzc05hbWU9dDtlbHNlIGlmKGU9PT0ic3R5bGUiKXtjb25zdHtjbGFzc05hbWU6bn09dGhpcztuLmJhc2VWYWw9bi5hbmltVmFsPXR9c3VwZXIuc2V0QXR0cmlidXRlKGUsdCl9fTtjb25zdCBkdD0oKT0+e3Rocm93IG5ldyBUeXBlRXJyb3IoIklsbGVnYWwgY29uc3RydWN0b3IiKX07ZnVuY3Rpb24gbWEoKXtkdCgpfXJ0KG1hLGtuKSxtYS5wcm90b3R5cGU9a24ucHJvdG90eXBlO2Z1bmN0aW9uIGJhKCl7ZHQoKX1ydChiYSx6aSksYmEucHJvdG90eXBlPXppLnByb3RvdHlwZTtmdW5jdGlvbiBDYSgpe2R0KCl9cnQoQ2EsVG4pLENhLnByb3RvdHlwZT1Ubi5wcm90b3R5cGU7ZnVuY3Rpb24gU2EoKXtkdCgpfXJ0KFNhLEppKSxTYS5wcm90b3R5cGU9SmkucHJvdG90eXBlO2Z1bmN0aW9uIEVhKCl7ZHQoKX1ydChFYSxBYSksRWEucHJvdG90eXBlPUFhLnByb3RvdHlwZTtmdW5jdGlvbiB5YSgpe2R0KCl9cnQoeWEsT3MpLHlhLnByb3RvdHlwZT1Pcy5wcm90b3R5cGU7ZnVuY3Rpb24gdmEoKXtkdCgpfXJ0KHZhLE1uKSx2YS5wcm90b3R5cGU9TW4ucHJvdG90eXBlO2Z1bmN0aW9uIHdhKCl7ZHQoKX1ydCh3YSxFciksd2EucHJvdG90eXBlPUVyLnByb3RvdHlwZTtmdW5jdGlvbiBEYSgpe2R0KCl9cnQoRGEscGEpLERhLnByb3RvdHlwZT1wYS5wcm90b3R5cGU7ZnVuY3Rpb24gSWEoKXtkdCgpfXJ0KElhLFJuKSxJYS5wcm90b3R5cGU9Um4ucHJvdG90eXBlO2Z1bmN0aW9uIE5hKCl7ZHQoKX1ydChOYSxPbiksTmEucHJvdG90eXBlPU9uLnByb3RvdHlwZTtjb25zdCBmMj17QXR0cjptYSxDREFUQVNlY3Rpb246YmEsQ2hhcmFjdGVyRGF0YTpDYSxDb21tZW50OlNhLERvY3VtZW50RnJhZ21lbnQ6RWEsRG9jdW1lbnRUeXBlOnlhLEVsZW1lbnQ6dmEsTm9kZTp3YSxTaGFkb3dSb290OkRhLFRleHQ6SWEsU1ZHRWxlbWVudDpOYX0sTG49bmV3IFdlYWtNYXAsXz17Z2V0KHIsZSl7cmV0dXJuIExuLmhhcyhyKSYmTG4uZ2V0KHIpW2VdfHxudWxsfSxzZXQocixlLHQpe0xuLmhhcyhyKXx8TG4uc2V0KHIse30pO2NvbnN0IG49TG4uZ2V0KHIpLHM9ZS5zbGljZSgyKTtuW2VdJiZyLnJlbW92ZUV2ZW50TGlzdGVuZXIocyxuW2VdLCExKSwobltlXT10KSYmci5hZGRFdmVudExpc3RlbmVyKHMsdCwhMSl9fTtjbGFzcyBlZSBleHRlbmRzIE1ue3N0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCl7cmV0dXJuW119Y29uc3RydWN0b3IoZT1udWxsLHQ9IiIpe3N1cGVyKGUsdCk7Y29uc3Qgbj0hZTtsZXQgcztpZihuKXtjb25zdHtjb25zdHJ1Y3RvcjppfT10aGlzO2lmKCFYci5oYXMoaSkpdGhyb3cgbmV3IEVycm9yKCJ1bmFibGUgdG8gaW5pdGlhbGl6ZSB0aGlzIEN1c3RvbSBFbGVtZW50Iik7KHtvd25lckRvY3VtZW50OmUsbG9jYWxOYW1lOnQsb3B0aW9uczpzfT1Yci5nZXQoaSkpfWlmKGVbdm5dKXtjb25zdHtlbGVtZW50OmksdmFsdWVzOmF9PWVbdm5dO2Vbdm5dPW51bGw7Zm9yKGNvbnN0W28sdV1vZiBhKWlbb109dTtyZXR1cm4gaX1uJiYodGhpcy5vd25lckRvY3VtZW50PXRoaXNbaWVdLm93bmVyRG9jdW1lbnQ9ZSx0aGlzLmxvY2FsTmFtZT10LENyLnNldCh0aGlzLHtjb25uZWN0ZWQ6ITF9KSxzLmlzJiZ0aGlzLnNldEF0dHJpYnV0ZSgiaXMiLHMuaXMpKX1ibHVyKCl7dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBEcigiYmx1ciIpKX1jbGljaygpe2NvbnN0IGU9bmV3IERyKCJjbGljayIse2J1YmJsZXM6ITAsY2FuY2VsYWJsZTohMH0pO2UuYnV0dG9uPTAsdGhpcy5kaXNwYXRjaEV2ZW50KGUpfWdldCBhY2Nlc3NLZXlMYWJlbCgpe2NvbnN0e2FjY2Vzc0tleTplfT10aGlzO3JldHVybiBlJiZgQWx0K1NoaWZ0KyR7ZX1gfWdldCBpc0NvbnRlbnRFZGl0YWJsZSgpe3JldHVybiB0aGlzLmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIil9Z2V0IGNvbnRlbnRFZGl0YWJsZSgpe3JldHVybiB2ZS5nZXQodGhpcywiY29udGVudGVkaXRhYmxlIil9c2V0IGNvbnRlbnRFZGl0YWJsZShlKXt2ZS5zZXQodGhpcywiY29udGVudGVkaXRhYmxlIixlKX1nZXQgZHJhZ2dhYmxlKCl7cmV0dXJuIHZlLmdldCh0aGlzLCJkcmFnZ2FibGUiKX1zZXQgZHJhZ2dhYmxlKGUpe3ZlLnNldCh0aGlzLCJkcmFnZ2FibGUiLGUpfWdldCBoaWRkZW4oKXtyZXR1cm4gdmUuZ2V0KHRoaXMsImhpZGRlbiIpfXNldCBoaWRkZW4oZSl7dmUuc2V0KHRoaXMsImhpZGRlbiIsZSl9Z2V0IHNwZWxsY2hlY2soKXtyZXR1cm4gdmUuZ2V0KHRoaXMsInNwZWxsY2hlY2siKX1zZXQgc3BlbGxjaGVjayhlKXt2ZS5zZXQodGhpcywic3BlbGxjaGVjayIsZSl9Z2V0IGFjY2Vzc0tleSgpe3JldHVybiB6LmdldCh0aGlzLCJhY2Nlc3NrZXkiKX1zZXQgYWNjZXNzS2V5KGUpe3ouc2V0KHRoaXMsImFjY2Vzc2tleSIsZSl9Z2V0IGRpcigpe3JldHVybiB6LmdldCh0aGlzLCJkaXIiKX1zZXQgZGlyKGUpe3ouc2V0KHRoaXMsImRpciIsZSl9Z2V0IGxhbmcoKXtyZXR1cm4gei5nZXQodGhpcywibGFuZyIpfXNldCBsYW5nKGUpe3ouc2V0KHRoaXMsImxhbmciLGUpfWdldCB0aXRsZSgpe3JldHVybiB6LmdldCh0aGlzLCJ0aXRsZSIpfXNldCB0aXRsZShlKXt6LnNldCh0aGlzLCJ0aXRsZSIsZSl9Z2V0IG9uYWJvcnQoKXtyZXR1cm4gXy5nZXQodGhpcywib25hYm9ydCIpfXNldCBvbmFib3J0KGUpe18uc2V0KHRoaXMsIm9uYWJvcnQiLGUpfWdldCBvbmJsdXIoKXtyZXR1cm4gXy5nZXQodGhpcywib25ibHVyIil9c2V0IG9uYmx1cihlKXtfLnNldCh0aGlzLCJvbmJsdXIiLGUpfWdldCBvbmNhbmNlbCgpe3JldHVybiBfLmdldCh0aGlzLCJvbmNhbmNlbCIpfXNldCBvbmNhbmNlbChlKXtfLnNldCh0aGlzLCJvbmNhbmNlbCIsZSl9Z2V0IG9uY2FucGxheSgpe3JldHVybiBfLmdldCh0aGlzLCJvbmNhbnBsYXkiKX1zZXQgb25jYW5wbGF5KGUpe18uc2V0KHRoaXMsIm9uY2FucGxheSIsZSl9Z2V0IG9uY2FucGxheXRocm91Z2goKXtyZXR1cm4gXy5nZXQodGhpcywib25jYW5wbGF5dGhyb3VnaCIpfXNldCBvbmNhbnBsYXl0aHJvdWdoKGUpe18uc2V0KHRoaXMsIm9uY2FucGxheXRocm91Z2giLGUpfWdldCBvbmNoYW5nZSgpe3JldHVybiBfLmdldCh0aGlzLCJvbmNoYW5nZSIpfXNldCBvbmNoYW5nZShlKXtfLnNldCh0aGlzLCJvbmNoYW5nZSIsZSl9Z2V0IG9uY2xpY2soKXtyZXR1cm4gXy5nZXQodGhpcywib25jbGljayIpfXNldCBvbmNsaWNrKGUpe18uc2V0KHRoaXMsIm9uY2xpY2siLGUpfWdldCBvbmNsb3NlKCl7cmV0dXJuIF8uZ2V0KHRoaXMsIm9uY2xvc2UiKX1zZXQgb25jbG9zZShlKXtfLnNldCh0aGlzLCJvbmNsb3NlIixlKX1nZXQgb25jb250ZXh0bWVudSgpe3JldHVybiBfLmdldCh0aGlzLCJvbmNvbnRleHRtZW51Iil9c2V0IG9uY29udGV4dG1lbnUoZSl7Xy5zZXQodGhpcywib25jb250ZXh0bWVudSIsZSl9Z2V0IG9uY3VlY2hhbmdlKCl7cmV0dXJuIF8uZ2V0KHRoaXMsIm9uY3VlY2hhbmdlIil9c2V0IG9uY3VlY2hhbmdlKGUpe18uc2V0KHRoaXMsIm9uY3VlY2hhbmdlIixlKX1nZXQgb25kYmxjbGljaygpe3JldHVybiBfLmdldCh0aGlzLCJvbmRibGNsaWNrIil9c2V0IG9uZGJsY2xpY2soZSl7Xy5zZXQodGhpcywib25kYmxjbGljayIsZSl9Z2V0IG9uZHJhZygpe3JldHVybiBfLmdldCh0aGlzLCJvbmRyYWciKX1zZXQgb25kcmFnKGUpe18uc2V0KHRoaXMsIm9uZHJhZyIsZSl9Z2V0IG9uZHJhZ2VuZCgpe3JldHVybiBfLmdldCh0aGlzLCJvbmRyYWdlbmQiKX1zZXQgb25kcmFnZW5kKGUpe18uc2V0KHRoaXMsIm9uZHJhZ2VuZCIsZSl9Z2V0IG9uZHJhZ2VudGVyKCl7cmV0dXJuIF8uZ2V0KHRoaXMsIm9uZHJhZ2VudGVyIil9c2V0IG9uZHJhZ2VudGVyKGUpe18uc2V0KHRoaXMsIm9uZHJhZ2VudGVyIixlKX1nZXQgb25kcmFnbGVhdmUoKXtyZXR1cm4gXy5nZXQodGhpcywib25kcmFnbGVhdmUiKX1zZXQgb25kcmFnbGVhdmUoZSl7Xy5zZXQodGhpcywib25kcmFnbGVhdmUiLGUpfWdldCBvbmRyYWdvdmVyKCl7cmV0dXJuIF8uZ2V0KHRoaXMsIm9uZHJhZ292ZXIiKX1zZXQgb25kcmFnb3ZlcihlKXtfLnNldCh0aGlzLCJvbmRyYWdvdmVyIixlKX1nZXQgb25kcmFnc3RhcnQoKXtyZXR1cm4gXy5nZXQodGhpcywib25kcmFnc3RhcnQiKX1zZXQgb25kcmFnc3RhcnQoZSl7Xy5zZXQodGhpcywib25kcmFnc3RhcnQiLGUpfWdldCBvbmRyb3AoKXtyZXR1cm4gXy5nZXQodGhpcywib25kcm9wIil9c2V0IG9uZHJvcChlKXtfLnNldCh0aGlzLCJvbmRyb3AiLGUpfWdldCBvbmR1cmF0aW9uY2hhbmdlKCl7cmV0dXJuIF8uZ2V0KHRoaXMsIm9uZHVyYXRpb25jaGFuZ2UiKX1zZXQgb25kdXJhdGlvbmNoYW5nZShlKXtfLnNldCh0aGlzLCJvbmR1cmF0aW9uY2hhbmdlIixlKX1nZXQgb25lbXB0aWVkKCl7cmV0dXJuIF8uZ2V0KHRoaXMsIm9uZW1wdGllZCIpfXNldCBvbmVtcHRpZWQoZSl7Xy5zZXQodGhpcywib25lbXB0aWVkIixlKX1nZXQgb25lbmRlZCgpe3JldHVybiBfLmdldCh0aGlzLCJvbmVuZGVkIil9c2V0IG9uZW5kZWQoZSl7Xy5zZXQodGhpcywib25lbmRlZCIsZSl9Z2V0IG9uZXJyb3IoKXtyZXR1cm4gXy5nZXQodGhpcywib25lcnJvciIpfXNldCBvbmVycm9yKGUpe18uc2V0KHRoaXMsIm9uZXJyb3IiLGUpfWdldCBvbmZvY3VzKCl7cmV0dXJuIF8uZ2V0KHRoaXMsIm9uZm9jdXMiKX1zZXQgb25mb2N1cyhlKXtfLnNldCh0aGlzLCJvbmZvY3VzIixlKX1nZXQgb25pbnB1dCgpe3JldHVybiBfLmdldCh0aGlzLCJvbmlucHV0Iil9c2V0IG9uaW5wdXQoZSl7Xy5zZXQodGhpcywib25pbnB1dCIsZSl9Z2V0IG9uaW52YWxpZCgpe3JldHVybiBfLmdldCh0aGlzLCJvbmludmFsaWQiKX1zZXQgb25pbnZhbGlkKGUpe18uc2V0KHRoaXMsIm9uaW52YWxpZCIsZSl9Z2V0IG9ua2V5ZG93bigpe3JldHVybiBfLmdldCh0aGlzLCJvbmtleWRvd24iKX1zZXQgb25rZXlkb3duKGUpe18uc2V0KHRoaXMsIm9ua2V5ZG93biIsZSl9Z2V0IG9ua2V5cHJlc3MoKXtyZXR1cm4gXy5nZXQodGhpcywib25rZXlwcmVzcyIpfXNldCBvbmtleXByZXNzKGUpe18uc2V0KHRoaXMsIm9ua2V5cHJlc3MiLGUpfWdldCBvbmtleXVwKCl7cmV0dXJuIF8uZ2V0KHRoaXMsIm9ua2V5dXAiKX1zZXQgb25rZXl1cChlKXtfLnNldCh0aGlzLCJvbmtleXVwIixlKX1nZXQgb25sb2FkKCl7cmV0dXJuIF8uZ2V0KHRoaXMsIm9ubG9hZCIpfXNldCBvbmxvYWQoZSl7Xy5zZXQodGhpcywib25sb2FkIixlKX1nZXQgb25sb2FkZWRkYXRhKCl7cmV0dXJuIF8uZ2V0KHRoaXMsIm9ubG9hZGVkZGF0YSIpfXNldCBvbmxvYWRlZGRhdGEoZSl7Xy5zZXQodGhpcywib25sb2FkZWRkYXRhIixlKX1nZXQgb25sb2FkZWRtZXRhZGF0YSgpe3JldHVybiBfLmdldCh0aGlzLCJvbmxvYWRlZG1ldGFkYXRhIil9c2V0IG9ubG9hZGVkbWV0YWRhdGEoZSl7Xy5zZXQodGhpcywib25sb2FkZWRtZXRhZGF0YSIsZSl9Z2V0IG9ubG9hZHN0YXJ0KCl7cmV0dXJuIF8uZ2V0KHRoaXMsIm9ubG9hZHN0YXJ0Iil9c2V0IG9ubG9hZHN0YXJ0KGUpe18uc2V0KHRoaXMsIm9ubG9hZHN0YXJ0IixlKX1nZXQgb25tb3VzZWRvd24oKXtyZXR1cm4gXy5nZXQodGhpcywib25tb3VzZWRvd24iKX1zZXQgb25tb3VzZWRvd24oZSl7Xy5zZXQodGhpcywib25tb3VzZWRvd24iLGUpfWdldCBvbm1vdXNlZW50ZXIoKXtyZXR1cm4gXy5nZXQodGhpcywib25tb3VzZWVudGVyIil9c2V0IG9ubW91c2VlbnRlcihlKXtfLnNldCh0aGlzLCJvbm1vdXNlZW50ZXIiLGUpfWdldCBvbm1vdXNlbGVhdmUoKXtyZXR1cm4gXy5nZXQodGhpcywib25tb3VzZWxlYXZlIil9c2V0IG9ubW91c2VsZWF2ZShlKXtfLnNldCh0aGlzLCJvbm1vdXNlbGVhdmUiLGUpfWdldCBvbm1vdXNlbW92ZSgpe3JldHVybiBfLmdldCh0aGlzLCJvbm1vdXNlbW92ZSIpfXNldCBvbm1vdXNlbW92ZShlKXtfLnNldCh0aGlzLCJvbm1vdXNlbW92ZSIsZSl9Z2V0IG9ubW91c2VvdXQoKXtyZXR1cm4gXy5nZXQodGhpcywib25tb3VzZW91dCIpfXNldCBvbm1vdXNlb3V0KGUpe18uc2V0KHRoaXMsIm9ubW91c2VvdXQiLGUpfWdldCBvbm1vdXNlb3Zlcigpe3JldHVybiBfLmdldCh0aGlzLCJvbm1vdXNlb3ZlciIpfXNldCBvbm1vdXNlb3ZlcihlKXtfLnNldCh0aGlzLCJvbm1vdXNlb3ZlciIsZSl9Z2V0IG9ubW91c2V1cCgpe3JldHVybiBfLmdldCh0aGlzLCJvbm1vdXNldXAiKX1zZXQgb25tb3VzZXVwKGUpe18uc2V0KHRoaXMsIm9ubW91c2V1cCIsZSl9Z2V0IG9ubW91c2V3aGVlbCgpe3JldHVybiBfLmdldCh0aGlzLCJvbm1vdXNld2hlZWwiKX1zZXQgb25tb3VzZXdoZWVsKGUpe18uc2V0KHRoaXMsIm9ubW91c2V3aGVlbCIsZSl9Z2V0IG9ucGF1c2UoKXtyZXR1cm4gXy5nZXQodGhpcywib25wYXVzZSIpfXNldCBvbnBhdXNlKGUpe18uc2V0KHRoaXMsIm9ucGF1c2UiLGUpfWdldCBvbnBsYXkoKXtyZXR1cm4gXy5nZXQodGhpcywib25wbGF5Iil9c2V0IG9ucGxheShlKXtfLnNldCh0aGlzLCJvbnBsYXkiLGUpfWdldCBvbnBsYXlpbmcoKXtyZXR1cm4gXy5nZXQodGhpcywib25wbGF5aW5nIil9c2V0IG9ucGxheWluZyhlKXtfLnNldCh0aGlzLCJvbnBsYXlpbmciLGUpfWdldCBvbnByb2dyZXNzKCl7cmV0dXJuIF8uZ2V0KHRoaXMsIm9ucHJvZ3Jlc3MiKX1zZXQgb25wcm9ncmVzcyhlKXtfLnNldCh0aGlzLCJvbnByb2dyZXNzIixlKX1nZXQgb25yYXRlY2hhbmdlKCl7cmV0dXJuIF8uZ2V0KHRoaXMsIm9ucmF0ZWNoYW5nZSIpfXNldCBvbnJhdGVjaGFuZ2UoZSl7Xy5zZXQodGhpcywib25yYXRlY2hhbmdlIixlKX1nZXQgb25yZXNldCgpe3JldHVybiBfLmdldCh0aGlzLCJvbnJlc2V0Iil9c2V0IG9ucmVzZXQoZSl7Xy5zZXQodGhpcywib25yZXNldCIsZSl9Z2V0IG9ucmVzaXplKCl7cmV0dXJuIF8uZ2V0KHRoaXMsIm9ucmVzaXplIil9c2V0IG9ucmVzaXplKGUpe18uc2V0KHRoaXMsIm9ucmVzaXplIixlKX1nZXQgb25zY3JvbGwoKXtyZXR1cm4gXy5nZXQodGhpcywib25zY3JvbGwiKX1zZXQgb25zY3JvbGwoZSl7Xy5zZXQodGhpcywib25zY3JvbGwiLGUpfWdldCBvbnNlZWtlZCgpe3JldHVybiBfLmdldCh0aGlzLCJvbnNlZWtlZCIpfXNldCBvbnNlZWtlZChlKXtfLnNldCh0aGlzLCJvbnNlZWtlZCIsZSl9Z2V0IG9uc2Vla2luZygpe3JldHVybiBfLmdldCh0aGlzLCJvbnNlZWtpbmciKX1zZXQgb25zZWVraW5nKGUpe18uc2V0KHRoaXMsIm9uc2Vla2luZyIsZSl9Z2V0IG9uc2VsZWN0KCl7cmV0dXJuIF8uZ2V0KHRoaXMsIm9uc2VsZWN0Iil9c2V0IG9uc2VsZWN0KGUpe18uc2V0KHRoaXMsIm9uc2VsZWN0IixlKX1nZXQgb25zaG93KCl7cmV0dXJuIF8uZ2V0KHRoaXMsIm9uc2hvdyIpfXNldCBvbnNob3coZSl7Xy5zZXQodGhpcywib25zaG93IixlKX1nZXQgb25zdGFsbGVkKCl7cmV0dXJuIF8uZ2V0KHRoaXMsIm9uc3RhbGxlZCIpfXNldCBvbnN0YWxsZWQoZSl7Xy5zZXQodGhpcywib25zdGFsbGVkIixlKX1nZXQgb25zdWJtaXQoKXtyZXR1cm4gXy5nZXQodGhpcywib25zdWJtaXQiKX1zZXQgb25zdWJtaXQoZSl7Xy5zZXQodGhpcywib25zdWJtaXQiLGUpfWdldCBvbnN1c3BlbmQoKXtyZXR1cm4gXy5nZXQodGhpcywib25zdXNwZW5kIil9c2V0IG9uc3VzcGVuZChlKXtfLnNldCh0aGlzLCJvbnN1c3BlbmQiLGUpfWdldCBvbnRpbWV1cGRhdGUoKXtyZXR1cm4gXy5nZXQodGhpcywib250aW1ldXBkYXRlIil9c2V0IG9udGltZXVwZGF0ZShlKXtfLnNldCh0aGlzLCJvbnRpbWV1cGRhdGUiLGUpfWdldCBvbnRvZ2dsZSgpe3JldHVybiBfLmdldCh0aGlzLCJvbnRvZ2dsZSIpfXNldCBvbnRvZ2dsZShlKXtfLnNldCh0aGlzLCJvbnRvZ2dsZSIsZSl9Z2V0IG9udm9sdW1lY2hhbmdlKCl7cmV0dXJuIF8uZ2V0KHRoaXMsIm9udm9sdW1lY2hhbmdlIil9c2V0IG9udm9sdW1lY2hhbmdlKGUpe18uc2V0KHRoaXMsIm9udm9sdW1lY2hhbmdlIixlKX1nZXQgb253YWl0aW5nKCl7cmV0dXJuIF8uZ2V0KHRoaXMsIm9ud2FpdGluZyIpfXNldCBvbndhaXRpbmcoZSl7Xy5zZXQodGhpcywib253YWl0aW5nIixlKX1nZXQgb25hdXhjbGljaygpe3JldHVybiBfLmdldCh0aGlzLCJvbmF1eGNsaWNrIil9c2V0IG9uYXV4Y2xpY2soZSl7Xy5zZXQodGhpcywib25hdXhjbGljayIsZSl9Z2V0IG9uZ290cG9pbnRlcmNhcHR1cmUoKXtyZXR1cm4gXy5nZXQodGhpcywib25nb3Rwb2ludGVyY2FwdHVyZSIpfXNldCBvbmdvdHBvaW50ZXJjYXB0dXJlKGUpe18uc2V0KHRoaXMsIm9uZ290cG9pbnRlcmNhcHR1cmUiLGUpfWdldCBvbmxvc3Rwb2ludGVyY2FwdHVyZSgpe3JldHVybiBfLmdldCh0aGlzLCJvbmxvc3Rwb2ludGVyY2FwdHVyZSIpfXNldCBvbmxvc3Rwb2ludGVyY2FwdHVyZShlKXtfLnNldCh0aGlzLCJvbmxvc3Rwb2ludGVyY2FwdHVyZSIsZSl9Z2V0IG9ucG9pbnRlcmNhbmNlbCgpe3JldHVybiBfLmdldCh0aGlzLCJvbnBvaW50ZXJjYW5jZWwiKX1zZXQgb25wb2ludGVyY2FuY2VsKGUpe18uc2V0KHRoaXMsIm9ucG9pbnRlcmNhbmNlbCIsZSl9Z2V0IG9ucG9pbnRlcmRvd24oKXtyZXR1cm4gXy5nZXQodGhpcywib25wb2ludGVyZG93biIpfXNldCBvbnBvaW50ZXJkb3duKGUpe18uc2V0KHRoaXMsIm9ucG9pbnRlcmRvd24iLGUpfWdldCBvbnBvaW50ZXJlbnRlcigpe3JldHVybiBfLmdldCh0aGlzLCJvbnBvaW50ZXJlbnRlciIpfXNldCBvbnBvaW50ZXJlbnRlcihlKXtfLnNldCh0aGlzLCJvbnBvaW50ZXJlbnRlciIsZSl9Z2V0IG9ucG9pbnRlcmxlYXZlKCl7cmV0dXJuIF8uZ2V0KHRoaXMsIm9ucG9pbnRlcmxlYXZlIil9c2V0IG9ucG9pbnRlcmxlYXZlKGUpe18uc2V0KHRoaXMsIm9ucG9pbnRlcmxlYXZlIixlKX1nZXQgb25wb2ludGVybW92ZSgpe3JldHVybiBfLmdldCh0aGlzLCJvbnBvaW50ZXJtb3ZlIil9c2V0IG9ucG9pbnRlcm1vdmUoZSl7Xy5zZXQodGhpcywib25wb2ludGVybW92ZSIsZSl9Z2V0IG9ucG9pbnRlcm91dCgpe3JldHVybiBfLmdldCh0aGlzLCJvbnBvaW50ZXJvdXQiKX1zZXQgb25wb2ludGVyb3V0KGUpe18uc2V0KHRoaXMsIm9ucG9pbnRlcm91dCIsZSl9Z2V0IG9ucG9pbnRlcm92ZXIoKXtyZXR1cm4gXy5nZXQodGhpcywib25wb2ludGVyb3ZlciIpfXNldCBvbnBvaW50ZXJvdmVyKGUpe18uc2V0KHRoaXMsIm9ucG9pbnRlcm92ZXIiLGUpfWdldCBvbnBvaW50ZXJ1cCgpe3JldHVybiBfLmdldCh0aGlzLCJvbnBvaW50ZXJ1cCIpfXNldCBvbnBvaW50ZXJ1cChlKXtfLnNldCh0aGlzLCJvbnBvaW50ZXJ1cCIsZSl9fWNvbnN0IHljPSJ0ZW1wbGF0ZSI7Y2xhc3MgdmMgZXh0ZW5kcyBlZXtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLHljKTtjb25zdCB0PXRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7KHRoaXNbQXNdPXQpW2plXT10aGlzfWdldCBjb250ZW50KCl7aWYodGhpcy5oYXNDaGlsZE5vZGVzKCkmJiF0aGlzW0FzXS5oYXNDaGlsZE5vZGVzKCkpZm9yKGNvbnN0IGUgb2YgdGhpcy5jaGlsZE5vZGVzKXRoaXNbQXNdLmFwcGVuZENoaWxkKGUuY2xvbmVOb2RlKCEwKSk7cmV0dXJuIHRoaXNbQXNdfX1XZSh5Yyx2Yyk7Y2xhc3MgcDIgZXh0ZW5kcyBlZXtjb25zdHJ1Y3RvcihlLHQ9Imh0bWwiKXtzdXBlcihlLHQpfX1jb25zdHt0b1N0cmluZzpnMn09ZWUucHJvdG90eXBlO2NsYXNzIFFzIGV4dGVuZHMgZWV7Z2V0IGlubmVySFRNTCgpe3JldHVybiB0aGlzLnRleHRDb250ZW50fXNldCBpbm5lckhUTUwoZSl7dGhpcy50ZXh0Q29udGVudD1lfXRvU3RyaW5nKCl7cmV0dXJuIGcyLmNhbGwodGhpcy5jbG9uZU5vZGUoKSkucmVwbGFjZSgiPjwiLCgpPT5gPiR7dGhpcy50ZXh0Q29udGVudH08YCl9fWNvbnN0IHdjPSJzY3JpcHQiO2NsYXNzIERjIGV4dGVuZHMgUXN7Y29uc3RydWN0b3IoZSx0PXdjKXtzdXBlcihlLHQpfWdldCB0eXBlKCl7cmV0dXJuIHouZ2V0KHRoaXMsInR5cGUiKX1zZXQgdHlwZShlKXt6LnNldCh0aGlzLCJ0eXBlIixlKX1nZXQgc3JjKCl7cmV0dXJuIHouZ2V0KHRoaXMsInNyYyIpfXNldCBzcmMoZSl7ei5zZXQodGhpcywic3JjIixlKX1nZXQgZGVmZXIoKXtyZXR1cm4gdmUuZ2V0KHRoaXMsImRlZmVyIil9c2V0IGRlZmVyKGUpe3ZlLnNldCh0aGlzLCJkZWZlciIsZSl9Z2V0IGNyb3NzT3JpZ2luKCl7cmV0dXJuIHouZ2V0KHRoaXMsImNyb3Nzb3JpZ2luIil9c2V0IGNyb3NzT3JpZ2luKGUpe3ouc2V0KHRoaXMsImNyb3Nzb3JpZ2luIixlKX1nZXQgbm9tb2R1bGUoKXtyZXR1cm4gdmUuZ2V0KHRoaXMsIm5vbW9kdWxlIil9c2V0IG5vbW9kdWxlKGUpe3ZlLnNldCh0aGlzLCJub21vZHVsZSIsZSl9Z2V0IHJlZmVycmVyUG9saWN5KCl7cmV0dXJuIHouZ2V0KHRoaXMsInJlZmVycmVycG9saWN5Iil9c2V0IHJlZmVycmVyUG9saWN5KGUpe3ouc2V0KHRoaXMsInJlZmVycmVycG9saWN5IixlKX1nZXQgbm9uY2UoKXtyZXR1cm4gei5nZXQodGhpcywibm9uY2UiKX1zZXQgbm9uY2UoZSl7ei5zZXQodGhpcywibm9uY2UiLGUpfWdldCBhc3luYygpe3JldHVybiB2ZS5nZXQodGhpcywiYXN5bmMiKX1zZXQgYXN5bmMoZSl7dmUuc2V0KHRoaXMsImFzeW5jIixlKX1nZXQgdGV4dCgpe3JldHVybiB0aGlzLnRleHRDb250ZW50fXNldCB0ZXh0KGUpe3RoaXMudGV4dENvbnRlbnQ9ZX19V2Uod2MsRGMpO2NsYXNzIG0yIGV4dGVuZHMgZWV7Y29uc3RydWN0b3IoZSx0PSJmcmFtZSIpe3N1cGVyKGUsdCl9fWNvbnN0IEljPSJpZnJhbWUiO2NsYXNzIE5jIGV4dGVuZHMgZWV7Y29uc3RydWN0b3IoZSx0PUljKXtzdXBlcihlLHQpfWdldCBzcmMoKXtyZXR1cm4gei5nZXQodGhpcywic3JjIil9c2V0IHNyYyhlKXt6LnNldCh0aGlzLCJzcmMiLGUpfWdldCBzcmNkb2MoKXtyZXR1cm4gei5nZXQodGhpcywic3JjZG9jIil9c2V0IHNyY2RvYyhlKXt6LnNldCh0aGlzLCJzcmNkb2MiLGUpfWdldCBuYW1lKCl7cmV0dXJuIHouZ2V0KHRoaXMsIm5hbWUiKX1zZXQgbmFtZShlKXt6LnNldCh0aGlzLCJuYW1lIixlKX1nZXQgYWxsb3coKXtyZXR1cm4gei5nZXQodGhpcywiYWxsb3ciKX1zZXQgYWxsb3coZSl7ei5zZXQodGhpcywiYWxsb3ciLGUpfWdldCBhbGxvd0Z1bGxzY3JlZW4oKXtyZXR1cm4gdmUuZ2V0KHRoaXMsImFsbG93ZnVsbHNjcmVlbiIpfXNldCBhbGxvd0Z1bGxzY3JlZW4oZSl7dmUuc2V0KHRoaXMsImFsbG93ZnVsbHNjcmVlbiIsZSl9Z2V0IHJlZmVycmVyUG9saWN5KCl7cmV0dXJuIHouZ2V0KHRoaXMsInJlZmVycmVycG9saWN5Iil9c2V0IHJlZmVycmVyUG9saWN5KGUpe3ouc2V0KHRoaXMsInJlZmVycmVycG9saWN5IixlKX1nZXQgbG9hZGluZygpe3JldHVybiB6LmdldCh0aGlzLCJsb2FkaW5nIil9c2V0IGxvYWRpbmcoZSl7ei5zZXQodGhpcywibG9hZGluZyIsZSl9fVdlKEljLE5jKTtjbGFzcyBiMiBleHRlbmRzIGVle2NvbnN0cnVjdG9yKGUsdD0ib2JqZWN0Iil7c3VwZXIoZSx0KX19Y2xhc3MgQzIgZXh0ZW5kcyBlZXtjb25zdHJ1Y3RvcihlLHQ9ImhlYWQiKXtzdXBlcihlLHQpfX1jbGFzcyBTMiBleHRlbmRzIGVle2NvbnN0cnVjdG9yKGUsdD0iYm9keSIpe3N1cGVyKGUsdCl9fXZhciBrYT17fSx4YT17fSxUYT17fSxrYz17fSx4Yz17fTt4Yy5TdHlsZVNoZWV0PWZ1bmN0aW9uKCl7dGhpcy5wYXJlbnRTdHlsZVNoZWV0PW51bGx9LGtjLlN0eWxlU2hlZXQ9eGMuU3R5bGVTaGVldDt2YXIgQmE9e30sZnQ9e30sT2U9e307T2UuQ1NTUnVsZT1mdW5jdGlvbigpe3RoaXMucGFyZW50UnVsZT1udWxsLHRoaXMucGFyZW50U3R5bGVTaGVldD1udWxsfSxPZS5DU1NSdWxlLlVOS05PV05fUlVMRT0wLE9lLkNTU1J1bGUuU1RZTEVfUlVMRT0xLE9lLkNTU1J1bGUuQ0hBUlNFVF9SVUxFPTIsT2UuQ1NTUnVsZS5JTVBPUlRfUlVMRT0zLE9lLkNTU1J1bGUuTUVESUFfUlVMRT00LE9lLkNTU1J1bGUuRk9OVF9GQUNFX1JVTEU9NSxPZS5DU1NSdWxlLlBBR0VfUlVMRT02LE9lLkNTU1J1bGUuS0VZRlJBTUVTX1JVTEU9NyxPZS5DU1NSdWxlLktFWUZSQU1FX1JVTEU9OCxPZS5DU1NSdWxlLk1BUkdJTl9SVUxFPTksT2UuQ1NTUnVsZS5OQU1FU1BBQ0VfUlVMRT0xMCxPZS5DU1NSdWxlLkNPVU5URVJfU1RZTEVfUlVMRT0xMSxPZS5DU1NSdWxlLlNVUFBPUlRTX1JVTEU9MTIsT2UuQ1NTUnVsZS5ET0NVTUVOVF9SVUxFPTEzLE9lLkNTU1J1bGUuRk9OVF9GRUFUVVJFX1ZBTFVFU19SVUxFPTE0LE9lLkNTU1J1bGUuVklFV1BPUlRfUlVMRT0xNSxPZS5DU1NSdWxlLlJFR0lPTl9TVFlMRV9SVUxFPTE2LE9lLkNTU1J1bGUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpPZS5DU1NSdWxlfSxmdC5DU1NSdWxlPU9lLkNTU1J1bGU7dmFyIFRjO2Z1bmN0aW9uIFdzKCl7aWYoVGMpcmV0dXJuIEJhO1RjPTE7dmFyIHI9e0NTU1N0eWxlRGVjbGFyYXRpb246bm4oKS5DU1NTdHlsZURlY2xhcmF0aW9uLENTU1J1bGU6ZnQuQ1NTUnVsZX07cmV0dXJuIHIuQ1NTU3R5bGVSdWxlPWZ1bmN0aW9uKCl7ci5DU1NSdWxlLmNhbGwodGhpcyksdGhpcy5zZWxlY3RvclRleHQ9IiIsdGhpcy5zdHlsZT1uZXcgci5DU1NTdHlsZURlY2xhcmF0aW9uLHRoaXMuc3R5bGUucGFyZW50UnVsZT10aGlzfSxyLkNTU1N0eWxlUnVsZS5wcm90b3R5cGU9bmV3IHIuQ1NTUnVsZSxyLkNTU1N0eWxlUnVsZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ci5DU1NTdHlsZVJ1bGUsci5DU1NTdHlsZVJ1bGUucHJvdG90eXBlLnR5cGU9MSxPYmplY3QuZGVmaW5lUHJvcGVydHkoci5DU1NTdHlsZVJ1bGUucHJvdG90eXBlLCJjc3NUZXh0Iix7Z2V0OmZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuc2VsZWN0b3JUZXh0P2U9dGhpcy5zZWxlY3RvclRleHQrIiB7Iit0aGlzLnN0eWxlLmNzc1RleHQrIn0iOmU9IiIsZX0sc2V0OmZ1bmN0aW9uKGUpe3ZhciB0PXIuQ1NTU3R5bGVSdWxlLnBhcnNlKGUpO3RoaXMuc3R5bGU9dC5zdHlsZSx0aGlzLnNlbGVjdG9yVGV4dD10LnNlbGVjdG9yVGV4dH19KSxyLkNTU1N0eWxlUnVsZS5wYXJzZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxuPSJzZWxlY3RvciIscyxpPXQsYT0iIixvPXtzZWxlY3RvcjohMCx2YWx1ZTohMH0sdT1uZXcgci5DU1NTdHlsZVJ1bGUsbCxBPSIiLGQ7ZD1lLmNoYXJBdCh0KTt0Kyspc3dpdGNoKGQpe2Nhc2UiICI6Y2FzZSIJIjpjYXNlIlxyIjpjYXNlYApgOmNhc2UiXGYiOmlmKG9bbl0pc3dpdGNoKGUuY2hhckF0KHQtMSkpe2Nhc2UiICI6Y2FzZSIJIjpjYXNlIlxyIjpjYXNlYApgOmNhc2UiXGYiOmJyZWFrO2RlZmF1bHQ6YSs9IiAiO2JyZWFrfWJyZWFrO2Nhc2UnIic6aWYoaT10KzEscz1lLmluZGV4T2YoJyInLGkpKzEsIXMpdGhyb3cnIiBpcyBtaXNzaW5nJzthKz1lLnNsaWNlKHQscyksdD1zLTE7YnJlYWs7Y2FzZSInIjppZihpPXQrMSxzPWUuaW5kZXhPZigiJyIsaSkrMSwhcyl0aHJvdyInIGlzIG1pc3NpbmciO2ErPWUuc2xpY2UodCxzKSx0PXMtMTticmVhaztjYXNlIi8iOmlmKGUuY2hhckF0KHQrMSk9PT0iKiIpe2lmKHQrPTIscz1lLmluZGV4T2YoIiovIix0KSxzPT09LTEpdGhyb3cgbmV3IFN5bnRheEVycm9yKCJNaXNzaW5nICovIik7dD1zKzF9ZWxzZSBhKz1kO2JyZWFrO2Nhc2UieyI6bj09PSJzZWxlY3RvciImJih1LnNlbGVjdG9yVGV4dD1hLnRyaW0oKSxhPSIiLG49Im5hbWUiKTticmVhaztjYXNlIjoiOm49PT0ibmFtZSI/KGw9YS50cmltKCksYT0iIixuPSJ2YWx1ZSIpOmErPWQ7YnJlYWs7Y2FzZSIhIjpuPT09InZhbHVlIiYmZS5pbmRleE9mKCIhaW1wb3J0YW50Iix0KT09PXQ/KEE9ImltcG9ydGFudCIsdCs9OSk6YSs9ZDticmVhaztjYXNlIjsiOm49PT0idmFsdWUiPyh1LnN0eWxlLnNldFByb3BlcnR5KGwsYS50cmltKCksQSksQT0iIixhPSIiLG49Im5hbWUiKTphKz1kO2JyZWFrO2Nhc2UifSI6aWYobj09PSJ2YWx1ZSIpdS5zdHlsZS5zZXRQcm9wZXJ0eShsLGEudHJpbSgpLEEpLEE9IiIsYT0iIjtlbHNle2lmKG49PT0ibmFtZSIpYnJlYWs7YSs9ZH1uPSJzZWxlY3RvciI7YnJlYWs7ZGVmYXVsdDphKz1kO2JyZWFrfXJldHVybiB1fSxCYS5DU1NTdHlsZVJ1bGU9ci5DU1NTdHlsZVJ1bGUsQmF9dmFyIEJjO2Z1bmN0aW9uIEtzKCl7aWYoQmMpcmV0dXJuIFRhO0JjPTE7dmFyIHI9e1N0eWxlU2hlZXQ6a2MuU3R5bGVTaGVldCxDU1NTdHlsZVJ1bGU6V3MoKS5DU1NTdHlsZVJ1bGV9O3JldHVybiByLkNTU1N0eWxlU2hlZXQ9ZnVuY3Rpb24oKXtyLlN0eWxlU2hlZXQuY2FsbCh0aGlzKSx0aGlzLmNzc1J1bGVzPVtdfSxyLkNTU1N0eWxlU2hlZXQucHJvdG90eXBlPW5ldyByLlN0eWxlU2hlZXQsci5DU1NTdHlsZVNoZWV0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLkNTU1N0eWxlU2hlZXQsci5DU1NTdHlsZVNoZWV0LnByb3RvdHlwZS5pbnNlcnRSdWxlPWZ1bmN0aW9uKGUsdCl7aWYodDwwfHx0PnRoaXMuY3NzUnVsZXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJTkRFWF9TSVpFX0VSUiIpO3ZhciBuPXIucGFyc2UoZSkuY3NzUnVsZXNbMF07cmV0dXJuIG4ucGFyZW50U3R5bGVTaGVldD10aGlzLHRoaXMuY3NzUnVsZXMuc3BsaWNlKHQsMCxuKSx0fSxyLkNTU1N0eWxlU2hlZXQucHJvdG90eXBlLmRlbGV0ZVJ1bGU9ZnVuY3Rpb24oZSl7aWYoZTwwfHxlPj10aGlzLmNzc1J1bGVzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSU5ERVhfU0laRV9FUlIiKTt0aGlzLmNzc1J1bGVzLnNwbGljZShlLDEpfSxyLkNTU1N0eWxlU2hlZXQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPSIiLHQ9dGhpcy5jc3NSdWxlcyxuPTA7bjx0Lmxlbmd0aDtuKyspZSs9dFtuXS5jc3NUZXh0K2AKYDtyZXR1cm4gZX0sVGEuQ1NTU3R5bGVTaGVldD1yLkNTU1N0eWxlU2hlZXQsci5wYXJzZT1HYSgpLnBhcnNlLFRhfXZhciBfYT17fSxSYT17fSxZcz17fTtZcy5NZWRpYUxpc3Q9ZnVuY3Rpb24oKXt0aGlzLmxlbmd0aD0wfSxZcy5NZWRpYUxpc3QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpZcy5NZWRpYUxpc3QsZ2V0IG1lZGlhVGV4dCgpe3JldHVybiBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKHRoaXMsIiwgIil9LHNldCBtZWRpYVRleHQocil7Zm9yKHZhciBlPXIuc3BsaXQoIiwiKSx0PXRoaXMubGVuZ3RoPWUubGVuZ3RoLG49MDtuPHQ7bisrKXRoaXNbbl09ZVtuXS50cmltKCl9LGFwcGVuZE1lZGl1bTpmdW5jdGlvbihyKXtBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHRoaXMscik9PT0tMSYmKHRoaXNbdGhpcy5sZW5ndGhdPXIsdGhpcy5sZW5ndGgrKyl9LGRlbGV0ZU1lZGl1bTpmdW5jdGlvbihyKXt2YXIgZT1BcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHRoaXMscik7ZSE9PS0xJiZBcnJheS5wcm90b3R5cGUuc3BsaWNlLmNhbGwodGhpcyxlLDEpfX0sUmEuTWVkaWFMaXN0PVlzLk1lZGlhTGlzdDt2YXIgX2M7ZnVuY3Rpb24gUmMoKXtpZihfYylyZXR1cm4gX2E7X2M9MTt2YXIgcj17Q1NTUnVsZTpmdC5DU1NSdWxlLENTU1N0eWxlU2hlZXQ6S3MoKS5DU1NTdHlsZVNoZWV0LE1lZGlhTGlzdDpSYS5NZWRpYUxpc3R9O3JldHVybiByLkNTU0ltcG9ydFJ1bGU9ZnVuY3Rpb24oKXtyLkNTU1J1bGUuY2FsbCh0aGlzKSx0aGlzLmhyZWY9IiIsdGhpcy5tZWRpYT1uZXcgci5NZWRpYUxpc3QsdGhpcy5zdHlsZVNoZWV0PW5ldyByLkNTU1N0eWxlU2hlZXR9LHIuQ1NTSW1wb3J0UnVsZS5wcm90b3R5cGU9bmV3IHIuQ1NTUnVsZSxyLkNTU0ltcG9ydFJ1bGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIuQ1NTSW1wb3J0UnVsZSxyLkNTU0ltcG9ydFJ1bGUucHJvdG90eXBlLnR5cGU9MyxPYmplY3QuZGVmaW5lUHJvcGVydHkoci5DU1NJbXBvcnRSdWxlLnByb3RvdHlwZSwiY3NzVGV4dCIse2dldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMubWVkaWEubWVkaWFUZXh0O3JldHVybiJAaW1wb3J0IHVybCgiK3RoaXMuaHJlZisiKSIrKGU/IiAiK2U6IiIpKyI7In0sc2V0OmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG49IiIscz0iIixpLGE7YT1lLmNoYXJBdCh0KTt0Kyspc3dpdGNoKGEpe2Nhc2UiICI6Y2FzZSIJIjpjYXNlIlxyIjpjYXNlYApgOmNhc2UiXGYiOm49PT0iYWZ0ZXItaW1wb3J0Ij9uPSJ1cmwiOnMrPWE7YnJlYWs7Y2FzZSJAIjohbiYmZS5pbmRleE9mKCJAaW1wb3J0Iix0KT09PXQmJihuPSJhZnRlci1pbXBvcnQiLHQrPTYscz0iIik7YnJlYWs7Y2FzZSJ1IjppZihuPT09InVybCImJmUuaW5kZXhPZigidXJsKCIsdCk9PT10KXtpZihpPWUuaW5kZXhPZigiKSIsdCsxKSxpPT09LTEpdGhyb3cgdCsnOiAiKSIgbm90IGZvdW5kJzt0Kz00O3ZhciBvPWUuc2xpY2UodCxpKTtvWzBdPT09b1tvLmxlbmd0aC0xXSYmKG9bMF09PT0nIid8fG9bMF09PT0iJyIpJiYobz1vLnNsaWNlKDEsLTEpKSx0aGlzLmhyZWY9byx0PWksbj0ibWVkaWEifWJyZWFrO2Nhc2UnIic6aWYobj09PSJ1cmwiKXtpZihpPWUuaW5kZXhPZignIicsdCsxKSwhaSl0aHJvdyB0K2A6ICciJyBub3QgZm91bmRgO3RoaXMuaHJlZj1lLnNsaWNlKHQrMSxpKSx0PWksbj0ibWVkaWEifWJyZWFrO2Nhc2UiJyI6aWYobj09PSJ1cmwiKXtpZihpPWUuaW5kZXhPZigiJyIsdCsxKSwhaSl0aHJvdyB0K2A6ICInIiBub3QgZm91bmRgO3RoaXMuaHJlZj1lLnNsaWNlKHQrMSxpKSx0PWksbj0ibWVkaWEifWJyZWFrO2Nhc2UiOyI6bj09PSJtZWRpYSImJnMmJih0aGlzLm1lZGlhLm1lZGlhVGV4dD1zLnRyaW0oKSk7YnJlYWs7ZGVmYXVsdDpuPT09Im1lZGlhIiYmKHMrPWEpO2JyZWFrfX19KSxfYS5DU1NJbXBvcnRSdWxlPXIuQ1NTSW1wb3J0UnVsZSxfYX12YXIgcm49e30sTXQ9e0NTU1J1bGU6ZnQuQ1NTUnVsZX07TXQuQ1NTR3JvdXBpbmdSdWxlPWZ1bmN0aW9uKCl7TXQuQ1NTUnVsZS5jYWxsKHRoaXMpLHRoaXMuY3NzUnVsZXM9W119LE10LkNTU0dyb3VwaW5nUnVsZS5wcm90b3R5cGU9bmV3IE10LkNTU1J1bGUsTXQuQ1NTR3JvdXBpbmdSdWxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1NdC5DU1NHcm91cGluZ1J1bGUsTXQuQ1NTR3JvdXBpbmdSdWxlLnByb3RvdHlwZS5pbnNlcnRSdWxlPWZ1bmN0aW9uKGUsdCl7aWYodDwwfHx0PnRoaXMuY3NzUnVsZXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJTkRFWF9TSVpFX0VSUiIpO3ZhciBuPU10LnBhcnNlKGUpLmNzc1J1bGVzWzBdO3JldHVybiBuLnBhcmVudFJ1bGU9dGhpcyx0aGlzLmNzc1J1bGVzLnNwbGljZSh0LDAsbiksdH0sTXQuQ1NTR3JvdXBpbmdSdWxlLnByb3RvdHlwZS5kZWxldGVSdWxlPWZ1bmN0aW9uKGUpe2lmKGU8MHx8ZT49dGhpcy5jc3NSdWxlcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIklOREVYX1NJWkVfRVJSIik7dGhpcy5jc3NSdWxlcy5zcGxpY2UoZSwxKVswXS5wYXJlbnRSdWxlPW51bGx9LHJuLkNTU0dyb3VwaW5nUnVsZT1NdC5DU1NHcm91cGluZ1J1bGU7dmFyIEZhPXt9LFBuPXt9LFp0PXtDU1NSdWxlOmZ0LkNTU1J1bGUsQ1NTR3JvdXBpbmdSdWxlOnJuLkNTU0dyb3VwaW5nUnVsZX07WnQuQ1NTQ29uZGl0aW9uUnVsZT1mdW5jdGlvbigpe1p0LkNTU0dyb3VwaW5nUnVsZS5jYWxsKHRoaXMpLHRoaXMuY3NzUnVsZXM9W119LFp0LkNTU0NvbmRpdGlvblJ1bGUucHJvdG90eXBlPW5ldyBadC5DU1NHcm91cGluZ1J1bGUsWnQuQ1NTQ29uZGl0aW9uUnVsZS5wcm90b3R5cGUuY29uc3RydWN0b3I9WnQuQ1NTQ29uZGl0aW9uUnVsZSxadC5DU1NDb25kaXRpb25SdWxlLnByb3RvdHlwZS5jb25kaXRpb25UZXh0PSIiLFp0LkNTU0NvbmRpdGlvblJ1bGUucHJvdG90eXBlLmNzc1RleHQ9IiIsUG4uQ1NTQ29uZGl0aW9uUnVsZT1adC5DU1NDb25kaXRpb25SdWxlO3ZhciBPdD17Q1NTUnVsZTpmdC5DU1NSdWxlLENTU0dyb3VwaW5nUnVsZTpybi5DU1NHcm91cGluZ1J1bGUsQ1NTQ29uZGl0aW9uUnVsZTpQbi5DU1NDb25kaXRpb25SdWxlLE1lZGlhTGlzdDpSYS5NZWRpYUxpc3R9O090LkNTU01lZGlhUnVsZT1mdW5jdGlvbigpe090LkNTU0NvbmRpdGlvblJ1bGUuY2FsbCh0aGlzKSx0aGlzLm1lZGlhPW5ldyBPdC5NZWRpYUxpc3R9LE90LkNTU01lZGlhUnVsZS5wcm90b3R5cGU9bmV3IE90LkNTU0NvbmRpdGlvblJ1bGUsT3QuQ1NTTWVkaWFSdWxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1PdC5DU1NNZWRpYVJ1bGUsT3QuQ1NTTWVkaWFSdWxlLnByb3RvdHlwZS50eXBlPTQsT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoT3QuQ1NTTWVkaWFSdWxlLnByb3RvdHlwZSx7Y29uZGl0aW9uVGV4dDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVkaWEubWVkaWFUZXh0fSxzZXQ6ZnVuY3Rpb24ocil7dGhpcy5tZWRpYS5tZWRpYVRleHQ9cn0sY29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITB9LGNzc1RleHQ6e2dldDpmdW5jdGlvbigpe2Zvcih2YXIgcj1bXSxlPTAsdD10aGlzLmNzc1J1bGVzLmxlbmd0aDtlPHQ7ZSsrKXIucHVzaCh0aGlzLmNzc1J1bGVzW2VdLmNzc1RleHQpO3JldHVybiJAbWVkaWEgIit0aGlzLm1lZGlhLm1lZGlhVGV4dCsiIHsiK3Iuam9pbigiIikrIn0ifSxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMH19KSxGYS5DU1NNZWRpYVJ1bGU9T3QuQ1NTTWVkaWFSdWxlO3ZhciBNYT17fSxWdD17Q1NTUnVsZTpmdC5DU1NSdWxlLENTU0dyb3VwaW5nUnVsZTpybi5DU1NHcm91cGluZ1J1bGUsQ1NTQ29uZGl0aW9uUnVsZTpQbi5DU1NDb25kaXRpb25SdWxlfTtWdC5DU1NTdXBwb3J0c1J1bGU9ZnVuY3Rpb24oKXtWdC5DU1NDb25kaXRpb25SdWxlLmNhbGwodGhpcyl9LFZ0LkNTU1N1cHBvcnRzUnVsZS5wcm90b3R5cGU9bmV3IFZ0LkNTU0NvbmRpdGlvblJ1bGUsVnQuQ1NTU3VwcG9ydHNSdWxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1WdC5DU1NTdXBwb3J0c1J1bGUsVnQuQ1NTU3VwcG9ydHNSdWxlLnByb3RvdHlwZS50eXBlPTEyLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdC5DU1NTdXBwb3J0c1J1bGUucHJvdG90eXBlLCJjc3NUZXh0Iix7Z2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciByPVtdLGU9MCx0PXRoaXMuY3NzUnVsZXMubGVuZ3RoO2U8dDtlKyspci5wdXNoKHRoaXMuY3NzUnVsZXNbZV0uY3NzVGV4dCk7cmV0dXJuIkBzdXBwb3J0cyAiK3RoaXMuY29uZGl0aW9uVGV4dCsiIHsiK3Iuam9pbigiIikrIn0ifX0pLE1hLkNTU1N1cHBvcnRzUnVsZT1WdC5DU1NTdXBwb3J0c1J1bGU7dmFyIE9hPXt9LEZjO2Z1bmN0aW9uIE1jKCl7aWYoRmMpcmV0dXJuIE9hO0ZjPTE7dmFyIHI9e0NTU1N0eWxlRGVjbGFyYXRpb246bm4oKS5DU1NTdHlsZURlY2xhcmF0aW9uLENTU1J1bGU6ZnQuQ1NTUnVsZX07cmV0dXJuIHIuQ1NTRm9udEZhY2VSdWxlPWZ1bmN0aW9uKCl7ci5DU1NSdWxlLmNhbGwodGhpcyksdGhpcy5zdHlsZT1uZXcgci5DU1NTdHlsZURlY2xhcmF0aW9uLHRoaXMuc3R5bGUucGFyZW50UnVsZT10aGlzfSxyLkNTU0ZvbnRGYWNlUnVsZS5wcm90b3R5cGU9bmV3IHIuQ1NTUnVsZSxyLkNTU0ZvbnRGYWNlUnVsZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ci5DU1NGb250RmFjZVJ1bGUsci5DU1NGb250RmFjZVJ1bGUucHJvdG90eXBlLnR5cGU9NSxPYmplY3QuZGVmaW5lUHJvcGVydHkoci5DU1NGb250RmFjZVJ1bGUucHJvdG90eXBlLCJjc3NUZXh0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIkBmb250LWZhY2UgeyIrdGhpcy5zdHlsZS5jc3NUZXh0KyJ9In19KSxPYS5DU1NGb250RmFjZVJ1bGU9ci5DU1NGb250RmFjZVJ1bGUsT2F9dmFyIE9jPXt9LHp0PXtDU1NSdWxlOmZ0LkNTU1J1bGV9O3p0LkNTU0hvc3RSdWxlPWZ1bmN0aW9uKCl7enQuQ1NTUnVsZS5jYWxsKHRoaXMpLHRoaXMuY3NzUnVsZXM9W119LHp0LkNTU0hvc3RSdWxlLnByb3RvdHlwZT1uZXcgenQuQ1NTUnVsZSx6dC5DU1NIb3N0UnVsZS5wcm90b3R5cGUuY29uc3RydWN0b3I9enQuQ1NTSG9zdFJ1bGUsenQuQ1NTSG9zdFJ1bGUucHJvdG90eXBlLnR5cGU9MTAwMSxPYmplY3QuZGVmaW5lUHJvcGVydHkoenQuQ1NTSG9zdFJ1bGUucHJvdG90eXBlLCJjc3NUZXh0Iix7Z2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciByPVtdLGU9MCx0PXRoaXMuY3NzUnVsZXMubGVuZ3RoO2U8dDtlKyspci5wdXNoKHRoaXMuY3NzUnVsZXNbZV0uY3NzVGV4dCk7cmV0dXJuIkBob3N0IHsiK3Iuam9pbigiIikrIn0ifX0pLE9jLkNTU0hvc3RSdWxlPXp0LkNTU0hvc3RSdWxlO3ZhciBMYT17fSxMYztmdW5jdGlvbiBQYSgpe2lmKExjKXJldHVybiBMYTtMYz0xO3ZhciByPXtDU1NSdWxlOmZ0LkNTU1J1bGUsQ1NTU3R5bGVEZWNsYXJhdGlvbjpubigpLkNTU1N0eWxlRGVjbGFyYXRpb259O3JldHVybiByLkNTU0tleWZyYW1lUnVsZT1mdW5jdGlvbigpe3IuQ1NTUnVsZS5jYWxsKHRoaXMpLHRoaXMua2V5VGV4dD0iIix0aGlzLnN0eWxlPW5ldyByLkNTU1N0eWxlRGVjbGFyYXRpb24sdGhpcy5zdHlsZS5wYXJlbnRSdWxlPXRoaXN9LHIuQ1NTS2V5ZnJhbWVSdWxlLnByb3RvdHlwZT1uZXcgci5DU1NSdWxlLHIuQ1NTS2V5ZnJhbWVSdWxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLkNTU0tleWZyYW1lUnVsZSxyLkNTU0tleWZyYW1lUnVsZS5wcm90b3R5cGUudHlwZT04LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLkNTU0tleWZyYW1lUnVsZS5wcm90b3R5cGUsImNzc1RleHQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5rZXlUZXh0KyIgeyIrdGhpcy5zdHlsZS5jc3NUZXh0KyJ9ICJ9fSksTGEuQ1NTS2V5ZnJhbWVSdWxlPXIuQ1NTS2V5ZnJhbWVSdWxlLExhfXZhciBVYT17fSxKdD17Q1NTUnVsZTpmdC5DU1NSdWxlfTtKdC5DU1NLZXlmcmFtZXNSdWxlPWZ1bmN0aW9uKCl7SnQuQ1NTUnVsZS5jYWxsKHRoaXMpLHRoaXMubmFtZT0iIix0aGlzLmNzc1J1bGVzPVtdfSxKdC5DU1NLZXlmcmFtZXNSdWxlLnByb3RvdHlwZT1uZXcgSnQuQ1NTUnVsZSxKdC5DU1NLZXlmcmFtZXNSdWxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1KdC5DU1NLZXlmcmFtZXNSdWxlLEp0LkNTU0tleWZyYW1lc1J1bGUucHJvdG90eXBlLnR5cGU9NyxPYmplY3QuZGVmaW5lUHJvcGVydHkoSnQuQ1NTS2V5ZnJhbWVzUnVsZS5wcm90b3R5cGUsImNzc1RleHQiLHtnZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIHI9W10sZT0wLHQ9dGhpcy5jc3NSdWxlcy5sZW5ndGg7ZTx0O2UrKylyLnB1c2goIiAgIit0aGlzLmNzc1J1bGVzW2VdLmNzc1RleHQpO3JldHVybiJAIisodGhpcy5fdmVuZG9yUHJlZml4fHwiIikrImtleWZyYW1lcyAiK3RoaXMubmFtZStgIHsgCmArci5qb2luKGAKYCkrYAp9YH19KSxVYS5DU1NLZXlmcmFtZXNSdWxlPUp0LkNTU0tleWZyYW1lc1J1bGU7dmFyIFBjPXt9LFVjPXt9LFpzPXt9O1pzLkNTU1ZhbHVlPWZ1bmN0aW9uKCl7fSxacy5DU1NWYWx1ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlpzLkNTU1ZhbHVlLHNldCBjc3NUZXh0KHIpe3ZhciBlPXRoaXMuX2dldENvbnN0cnVjdG9yTmFtZSgpO3Rocm93IG5ldyBFcnJvcignRE9NRXhjZXB0aW9uOiBwcm9wZXJ0eSAiY3NzVGV4dCIgb2YgIicrZSsnIiBpcyByZWFkb25seSBhbmQgY2FuIG5vdCBiZSByZXBsYWNlZCB3aXRoICInK3IrJyIhJyl9LGdldCBjc3NUZXh0KCl7dmFyIHI9dGhpcy5fZ2V0Q29uc3RydWN0b3JOYW1lKCk7dGhyb3cgbmV3IEVycm9yKCdnZXR0ZXIgImNzc1RleHQiIG9mICInK3IrJyIgaXMgbm90IGltcGxlbWVudGVkIScpfSxfZ2V0Q29uc3RydWN0b3JOYW1lOmZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5jb25zdHJ1Y3Rvci50b1N0cmluZygpLGU9ci5tYXRjaCgvZnVuY3Rpb25ccyhbXlwoXSspLyksdD1lWzFdO3JldHVybiB0fX0sVWMuQ1NTVmFsdWU9WnMuQ1NTVmFsdWU7dmFyIE50PXtDU1NWYWx1ZTpVYy5DU1NWYWx1ZX07TnQuQ1NTVmFsdWVFeHByZXNzaW9uPWZ1bmN0aW9uKGUsdCl7dGhpcy5fdG9rZW49ZSx0aGlzLl9pZHg9dH0sTnQuQ1NTVmFsdWVFeHByZXNzaW9uLnByb3RvdHlwZT1uZXcgTnQuQ1NTVmFsdWUsTnQuQ1NTVmFsdWVFeHByZXNzaW9uLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1OdC5DU1NWYWx1ZUV4cHJlc3Npb24sTnQuQ1NTVmFsdWVFeHByZXNzaW9uLnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbigpe2Zvcih2YXIgcj10aGlzLl90b2tlbixlPXRoaXMuX2lkeCx0PSIiLG49IiIscz0iIixpLGE9W107OysrZSl7aWYodD1yLmNoYXJBdChlKSx0PT09IiIpe3M9ImNzcyBleHByZXNzaW9uIGVycm9yOiB1bmZpbmlzaGVkIGV4cHJlc3Npb24hIjticmVha31zd2l0Y2godCl7Y2FzZSIoIjphLnB1c2godCksbis9dDticmVhaztjYXNlIikiOmEucG9wKHQpLG4rPXQ7YnJlYWs7Y2FzZSIvIjooaT10aGlzLl9wYXJzZUpTQ29tbWVudChyLGUpKT9pLmVycm9yP3M9ImNzcyBleHByZXNzaW9uIGVycm9yOiB1bmZpbmlzaGVkIGNvbW1lbnQgaW4gZXhwcmVzc2lvbiEiOmU9aS5pZHg6KGk9dGhpcy5fcGFyc2VKU1JleEV4cChyLGUpKT8oZT1pLmlkeCxuKz1pLnRleHQpOm4rPXQ7YnJlYWs7Y2FzZSInIjpjYXNlJyInOmk9dGhpcy5fcGFyc2VKU1N0cmluZyhyLGUsdCksaT8oZT1pLmlkeCxuKz1pLnRleHQpOm4rPXQ7YnJlYWs7ZGVmYXVsdDpuKz10O2JyZWFrfWlmKHN8fGEubGVuZ3RoPT09MClicmVha312YXIgbztyZXR1cm4gcz9vPXtlcnJvcjpzfTpvPXtpZHg6ZSxleHByZXNzaW9uOm59LG99LE50LkNTU1ZhbHVlRXhwcmVzc2lvbi5wcm90b3R5cGUuX3BhcnNlSlNDb21tZW50PWZ1bmN0aW9uKHIsZSl7dmFyIHQ9ci5jaGFyQXQoZSsxKSxuO2lmKHQ9PT0iLyJ8fHQ9PT0iKiIpe3ZhciBzPWUsaSxhO2lmKHQ9PT0iLyI/YT1gCmA6dD09PSIqIiYmKGE9IiovIiksaT1yLmluZGV4T2YoYSxzKzErMSksaSE9PS0xKXJldHVybiBpPWkrYS5sZW5ndGgtMSxuPXIuc3Vic3RyaW5nKGUsaSsxKSx7aWR4OmksdGV4dDpufTt2YXIgbz0iY3NzIGV4cHJlc3Npb24gZXJyb3I6IHVuZmluaXNoZWQgY29tbWVudCBpbiBleHByZXNzaW9uISI7cmV0dXJue2Vycm9yOm99fWVsc2UgcmV0dXJuITF9LE50LkNTU1ZhbHVlRXhwcmVzc2lvbi5wcm90b3R5cGUuX3BhcnNlSlNTdHJpbmc9ZnVuY3Rpb24ocixlLHQpe3ZhciBuPXRoaXMuX2ZpbmRNYXRjaGVkSWR4KHIsZSx0KSxzO3JldHVybiBuPT09LTE/ITE6KHM9ci5zdWJzdHJpbmcoZSxuK3QubGVuZ3RoKSx7aWR4Om4sdGV4dDpzfSl9LE50LkNTU1ZhbHVlRXhwcmVzc2lvbi5wcm90b3R5cGUuX3BhcnNlSlNSZXhFeHA9ZnVuY3Rpb24ocixlKXt2YXIgdD1yLnN1YnN0cmluZygwLGUpLnJlcGxhY2UoL1xzKyQvLCIiKSxuPVsvXiQvLC9cKCQvLC9cWyQvLC9cISQvLC9cKyQvLC9cLSQvLC9cKiQvLC9cL1xzKy8sL1wlJC8sL1w9JC8sL1w+JC8sLzwkLywvXCYkLywvXHwkLywvXF4kLywvXH4kLywvXD8kLywvXCwkLywvZGVsZXRlJC8sL2luJC8sL2luc3RhbmNlb2YkLywvbmV3JC8sL3R5cGVvZiQvLC92b2lkJC9dLHM9bi5zb21lKGZ1bmN0aW9uKGEpe3JldHVybiBhLnRlc3QodCl9KTtpZihzKXt2YXIgaT0iLyI7cmV0dXJuIHRoaXMuX3BhcnNlSlNTdHJpbmcocixlLGkpfWVsc2UgcmV0dXJuITF9LE50LkNTU1ZhbHVlRXhwcmVzc2lvbi5wcm90b3R5cGUuX2ZpbmRNYXRjaGVkSWR4PWZ1bmN0aW9uKHIsZSx0KXtmb3IodmFyIG49ZSxzLGk9LTE7OylpZihzPXIuaW5kZXhPZih0LG4rMSkscz09PS0xKXtzPWk7YnJlYWt9ZWxzZXt2YXIgYT1yLnN1YnN0cmluZyhlKzEscyksbz1hLm1hdGNoKC9cXCskLyk7aWYoIW98fG9bMF0lMj09PTApYnJlYWs7bj1zfXZhciB1PXIuaW5kZXhPZihgCmAsZSsxKTtyZXR1cm4gdTxzJiYocz1pKSxzfSxQYy5DU1NWYWx1ZUV4cHJlc3Npb249TnQuQ1NTVmFsdWVFeHByZXNzaW9uO3ZhciBHYz17fSxIYz17fSxWcz17fTtWcy5NYXRjaGVyTGlzdD1mdW5jdGlvbigpe3RoaXMubGVuZ3RoPTB9LFZzLk1hdGNoZXJMaXN0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6VnMuTWF0Y2hlckxpc3QsZ2V0IG1hdGNoZXJUZXh0KCl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5qb2luLmNhbGwodGhpcywiLCAiKX0sc2V0IG1hdGNoZXJUZXh0KHIpe2Zvcih2YXIgZT1yLnNwbGl0KCIsIiksdD10aGlzLmxlbmd0aD1lLmxlbmd0aCxuPTA7bjx0O24rKyl0aGlzW25dPWVbbl0udHJpbSgpfSxhcHBlbmRNYXRjaGVyOmZ1bmN0aW9uKHIpe0FycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwodGhpcyxyKT09PS0xJiYodGhpc1t0aGlzLmxlbmd0aF09cix0aGlzLmxlbmd0aCsrKX0sZGVsZXRlTWF0Y2hlcjpmdW5jdGlvbihyKXt2YXIgZT1BcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHRoaXMscik7ZSE9PS0xJiZBcnJheS5wcm90b3R5cGUuc3BsaWNlLmNhbGwodGhpcyxlLDEpfX0sSGMuTWF0Y2hlckxpc3Q9VnMuTWF0Y2hlckxpc3Q7dmFyIEx0PXtDU1NSdWxlOmZ0LkNTU1J1bGUsTWF0Y2hlckxpc3Q6SGMuTWF0Y2hlckxpc3R9O0x0LkNTU0RvY3VtZW50UnVsZT1mdW5jdGlvbigpe0x0LkNTU1J1bGUuY2FsbCh0aGlzKSx0aGlzLm1hdGNoZXI9bmV3IEx0Lk1hdGNoZXJMaXN0LHRoaXMuY3NzUnVsZXM9W119LEx0LkNTU0RvY3VtZW50UnVsZS5wcm90b3R5cGU9bmV3IEx0LkNTU1J1bGUsTHQuQ1NTRG9jdW1lbnRSdWxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1MdC5DU1NEb2N1bWVudFJ1bGUsTHQuQ1NTRG9jdW1lbnRSdWxlLnByb3RvdHlwZS50eXBlPTEwLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMdC5DU1NEb2N1bWVudFJ1bGUucHJvdG90eXBlLCJjc3NUZXh0Iix7Z2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciByPVtdLGU9MCx0PXRoaXMuY3NzUnVsZXMubGVuZ3RoO2U8dDtlKyspci5wdXNoKHRoaXMuY3NzUnVsZXNbZV0uY3NzVGV4dCk7cmV0dXJuIkAtbW96LWRvY3VtZW50ICIrdGhpcy5tYXRjaGVyLm1hdGNoZXJUZXh0KyIgeyIrci5qb2luKCIiKSsifSJ9fSksR2MuQ1NTRG9jdW1lbnRSdWxlPUx0LkNTU0RvY3VtZW50UnVsZTt2YXIgUWM7ZnVuY3Rpb24gR2EoKXtpZihRYylyZXR1cm4geGE7UWM9MTt2YXIgcj17fTtyZXR1cm4gci5wYXJzZT1mdW5jdGlvbih0KXtmb3IodmFyIG49MCxzPSJiZWZvcmUtc2VsZWN0b3IiLGksYT0iIixvPTAsdT17c2VsZWN0b3I6ITAsdmFsdWU6ITAsInZhbHVlLXBhcmVudGhlc2lzIjohMCxhdFJ1bGU6ITAsImltcG9ydFJ1bGUtYmVnaW4iOiEwLGltcG9ydFJ1bGU6ITAsYXRCbG9jazohMCxjb25kaXRpb25CbG9jazohMCwiZG9jdW1lbnRSdWxlLWJlZ2luIjohMH0sbD1uZXcgci5DU1NTdHlsZVNoZWV0LEE9bCxkLGc9W10sZj0hMSxDLHAsYj0iIixtLEUsdyxOLEksUixNLFcsTz0vQCgtKD86XHcrLSkrKT9rZXlmcmFtZXMvZyxWPWZ1bmN0aW9uKGgpe3ZhciBHPXQuc3Vic3RyaW5nKDAsbikuc3BsaXQoYApgKSxoZT1HLmxlbmd0aCxLPUcucG9wKCkubGVuZ3RoKzEsQWU9bmV3IEVycm9yKGgrIiAobGluZSAiK2hlKyIsIGNoYXIgIitLKyIpIik7dGhyb3cgQWUubGluZT1oZSxBZS5jaGFyPUssQWUuc3R5bGVTaGVldD1sLEFlfSxYO1g9dC5jaGFyQXQobik7bisrKXN3aXRjaChYKXtjYXNlIiAiOmNhc2UiCSI6Y2FzZSJcciI6Y2FzZWAKYDpjYXNlIlxmIjp1W3NdJiYoYSs9WCk7YnJlYWs7Y2FzZSciJzppPW4rMTtkbyBpPXQuaW5kZXhPZignIicsaSkrMSxpfHxWKCdVbm1hdGNoZWQgIicpO3doaWxlKHRbaS0yXT09PSJcXCIpO3N3aXRjaChhKz10LnNsaWNlKG4saSksbj1pLTEscyl7Y2FzZSJiZWZvcmUtdmFsdWUiOnM9InZhbHVlIjticmVhaztjYXNlImltcG9ydFJ1bGUtYmVnaW4iOnM9ImltcG9ydFJ1bGUiO2JyZWFrfWJyZWFrO2Nhc2UiJyI6aT1uKzE7ZG8gaT10LmluZGV4T2YoIiciLGkpKzEsaXx8VigiVW5tYXRjaGVkICciKTt3aGlsZSh0W2ktMl09PT0iXFwiKTtzd2l0Y2goYSs9dC5zbGljZShuLGkpLG49aS0xLHMpe2Nhc2UiYmVmb3JlLXZhbHVlIjpzPSJ2YWx1ZSI7YnJlYWs7Y2FzZSJpbXBvcnRSdWxlLWJlZ2luIjpzPSJpbXBvcnRSdWxlIjticmVha31icmVhaztjYXNlIi8iOnQuY2hhckF0KG4rMSk9PT0iKiI/KG4rPTIsaT10LmluZGV4T2YoIiovIixuKSxpPT09LTE/VigiTWlzc2luZyAqLyIpOm49aSsxKTphKz1YLHM9PT0iaW1wb3J0UnVsZS1iZWdpbiImJihhKz0iICIscz0iaW1wb3J0UnVsZSIpO2JyZWFrO2Nhc2UiQCI6aWYodC5pbmRleE9mKCJALW1vei1kb2N1bWVudCIsbik9PT1uKXtzPSJkb2N1bWVudFJ1bGUtYmVnaW4iLE09bmV3IHIuQ1NTRG9jdW1lbnRSdWxlLE0uX19zdGFydHM9bixuKz0xMyxhPSIiO2JyZWFrfWVsc2UgaWYodC5pbmRleE9mKCJAbWVkaWEiLG4pPT09bil7cz0iYXRCbG9jayIsRT1uZXcgci5DU1NNZWRpYVJ1bGUsRS5fX3N0YXJ0cz1uLG4rPTUsYT0iIjticmVha31lbHNlIGlmKHQuaW5kZXhPZigiQHN1cHBvcnRzIixuKT09PW4pe3M9ImNvbmRpdGlvbkJsb2NrIix3PW5ldyByLkNTU1N1cHBvcnRzUnVsZSx3Ll9fc3RhcnRzPW4sbis9OCxhPSIiO2JyZWFrfWVsc2UgaWYodC5pbmRleE9mKCJAaG9zdCIsbik9PT1uKXtzPSJob3N0UnVsZS1iZWdpbiIsbis9NCxXPW5ldyByLkNTU0hvc3RSdWxlLFcuX19zdGFydHM9bixhPSIiO2JyZWFrfWVsc2UgaWYodC5pbmRleE9mKCJAaW1wb3J0IixuKT09PW4pe3M9ImltcG9ydFJ1bGUtYmVnaW4iLG4rPTYsYSs9IkBpbXBvcnQiO2JyZWFrfWVsc2UgaWYodC5pbmRleE9mKCJAZm9udC1mYWNlIixuKT09PW4pe3M9ImZvbnRGYWNlUnVsZS1iZWdpbiIsbis9OSxJPW5ldyByLkNTU0ZvbnRGYWNlUnVsZSxJLl9fc3RhcnRzPW4sYT0iIjticmVha31lbHNle08ubGFzdEluZGV4PW47dmFyIHY9Ty5leGVjKHQpO2lmKHYmJnYuaW5kZXg9PT1uKXtzPSJrZXlmcmFtZXNSdWxlLWJlZ2luIixSPW5ldyByLkNTU0tleWZyYW1lc1J1bGUsUi5fX3N0YXJ0cz1uLFIuX3ZlbmRvclByZWZpeD12WzFdLG4rPXZbMF0ubGVuZ3RoLTEsYT0iIjticmVha31lbHNlIHM9PT0ic2VsZWN0b3IiJiYocz0iYXRSdWxlIil9YSs9WDticmVhaztjYXNlInsiOnM9PT0ic2VsZWN0b3IifHxzPT09ImF0UnVsZSI/KG0uc2VsZWN0b3JUZXh0PWEudHJpbSgpLG0uc3R5bGUuX19zdGFydHM9bixhPSIiLHM9ImJlZm9yZS1uYW1lIik6cz09PSJhdEJsb2NrIj8oRS5tZWRpYS5tZWRpYVRleHQ9YS50cmltKCksZCYmZy5wdXNoKGQpLEE9ZD1FLEUucGFyZW50U3R5bGVTaGVldD1sLGE9IiIscz0iYmVmb3JlLXNlbGVjdG9yIik6cz09PSJjb25kaXRpb25CbG9jayI/KHcuY29uZGl0aW9uVGV4dD1hLnRyaW0oKSxkJiZnLnB1c2goZCksQT1kPXcsdy5wYXJlbnRTdHlsZVNoZWV0PWwsYT0iIixzPSJiZWZvcmUtc2VsZWN0b3IiKTpzPT09Imhvc3RSdWxlLWJlZ2luIj8oZCYmZy5wdXNoKGQpLEE9ZD1XLFcucGFyZW50U3R5bGVTaGVldD1sLGE9IiIscz0iYmVmb3JlLXNlbGVjdG9yIik6cz09PSJmb250RmFjZVJ1bGUtYmVnaW4iPyhkJiYoSS5wYXJlbnRSdWxlPWQpLEkucGFyZW50U3R5bGVTaGVldD1sLG09SSxhPSIiLHM9ImJlZm9yZS1uYW1lIik6cz09PSJrZXlmcmFtZXNSdWxlLWJlZ2luIj8oUi5uYW1lPWEudHJpbSgpLGQmJihnLnB1c2goZCksUi5wYXJlbnRSdWxlPWQpLFIucGFyZW50U3R5bGVTaGVldD1sLEE9ZD1SLGE9IiIscz0ia2V5ZnJhbWVSdWxlLWJlZ2luIik6cz09PSJrZXlmcmFtZVJ1bGUtYmVnaW4iPyhtPW5ldyByLkNTU0tleWZyYW1lUnVsZSxtLmtleVRleHQ9YS50cmltKCksbS5fX3N0YXJ0cz1uLGE9IiIscz0iYmVmb3JlLW5hbWUiKTpzPT09ImRvY3VtZW50UnVsZS1iZWdpbiImJihNLm1hdGNoZXIubWF0Y2hlclRleHQ9YS50cmltKCksZCYmKGcucHVzaChkKSxNLnBhcmVudFJ1bGU9ZCksQT1kPU0sTS5wYXJlbnRTdHlsZVNoZWV0PWwsYT0iIixzPSJiZWZvcmUtc2VsZWN0b3IiKTticmVhaztjYXNlIjoiOnM9PT0ibmFtZSI/KHA9YS50cmltKCksYT0iIixzPSJiZWZvcmUtdmFsdWUiKTphKz1YO2JyZWFrO2Nhc2UiKCI6aWYocz09PSJ2YWx1ZSIpaWYoYS50cmltKCk9PT0iZXhwcmVzc2lvbiIpe3ZhciBQPW5ldyByLkNTU1ZhbHVlRXhwcmVzc2lvbih0LG4pLnBhcnNlKCk7UC5lcnJvcj9WKFAuZXJyb3IpOihhKz1QLmV4cHJlc3Npb24sbj1QLmlkeCl9ZWxzZSBzPSJ2YWx1ZS1wYXJlbnRoZXNpcyIsbz0xLGErPVg7ZWxzZSBzPT09InZhbHVlLXBhcmVudGhlc2lzIiYmbysrLGErPVg7YnJlYWs7Y2FzZSIpIjpzPT09InZhbHVlLXBhcmVudGhlc2lzIiYmKG8tLSxvPT09MCYmKHM9InZhbHVlIikpLGErPVg7YnJlYWs7Y2FzZSIhIjpzPT09InZhbHVlIiYmdC5pbmRleE9mKCIhaW1wb3J0YW50IixuKT09PW4/KGI9ImltcG9ydGFudCIsbis9OSk6YSs9WDticmVhaztjYXNlIjsiOnN3aXRjaChzKXtjYXNlInZhbHVlIjptLnN0eWxlLnNldFByb3BlcnR5KHAsYS50cmltKCksYiksYj0iIixhPSIiLHM9ImJlZm9yZS1uYW1lIjticmVhaztjYXNlImF0UnVsZSI6YT0iIixzPSJiZWZvcmUtc2VsZWN0b3IiO2JyZWFrO2Nhc2UiaW1wb3J0UnVsZSI6Tj1uZXcgci5DU1NJbXBvcnRSdWxlLE4ucGFyZW50U3R5bGVTaGVldD1OLnN0eWxlU2hlZXQucGFyZW50U3R5bGVTaGVldD1sLE4uY3NzVGV4dD1hK1gsbC5jc3NSdWxlcy5wdXNoKE4pLGE9IiIscz0iYmVmb3JlLXNlbGVjdG9yIjticmVhaztkZWZhdWx0OmErPVg7YnJlYWt9YnJlYWs7Y2FzZSJ9Ijpzd2l0Y2gocyl7Y2FzZSJ2YWx1ZSI6bS5zdHlsZS5zZXRQcm9wZXJ0eShwLGEudHJpbSgpLGIpLGI9IiI7Y2FzZSJiZWZvcmUtbmFtZSI6Y2FzZSJuYW1lIjptLl9fZW5kcz1uKzEsZCYmKG0ucGFyZW50UnVsZT1kKSxtLnBhcmVudFN0eWxlU2hlZXQ9bCxBLmNzc1J1bGVzLnB1c2gobSksYT0iIixBLmNvbnN0cnVjdG9yPT09ci5DU1NLZXlmcmFtZXNSdWxlP3M9ImtleWZyYW1lUnVsZS1iZWdpbiI6cz0iYmVmb3JlLXNlbGVjdG9yIjticmVhaztjYXNlImtleWZyYW1lUnVsZS1iZWdpbiI6Y2FzZSJiZWZvcmUtc2VsZWN0b3IiOmNhc2Uic2VsZWN0b3IiOmZvcihkfHxWKCJVbmV4cGVjdGVkIH0iKSxmPWcubGVuZ3RoPjA7Zy5sZW5ndGg+MDspe2lmKGQ9Zy5wb3AoKSxkLmNvbnN0cnVjdG9yLm5hbWU9PT0iQ1NTTWVkaWFSdWxlInx8ZC5jb25zdHJ1Y3Rvci5uYW1lPT09IkNTU1N1cHBvcnRzUnVsZSIpe0M9QSxBPWQsQS5jc3NSdWxlcy5wdXNoKEMpO2JyZWFrfWcubGVuZ3RoPT09MCYmKGY9ITEpfWZ8fChBLl9fZW5kcz1uKzEsbC5jc3NSdWxlcy5wdXNoKEEpLEE9bCxkPW51bGwpLGE9IiIscz0iYmVmb3JlLXNlbGVjdG9yIjticmVha31icmVhaztkZWZhdWx0OnN3aXRjaChzKXtjYXNlImJlZm9yZS1zZWxlY3RvciI6cz0ic2VsZWN0b3IiLG09bmV3IHIuQ1NTU3R5bGVSdWxlLG0uX19zdGFydHM9bjticmVhaztjYXNlImJlZm9yZS1uYW1lIjpzPSJuYW1lIjticmVhaztjYXNlImJlZm9yZS12YWx1ZSI6cz0idmFsdWUiO2JyZWFrO2Nhc2UiaW1wb3J0UnVsZS1iZWdpbiI6cz0iaW1wb3J0UnVsZSI7YnJlYWt9YSs9WDticmVha31yZXR1cm4gbH0seGEucGFyc2U9ci5wYXJzZSxyLkNTU1N0eWxlU2hlZXQ9S3MoKS5DU1NTdHlsZVNoZWV0LHIuQ1NTU3R5bGVSdWxlPVdzKCkuQ1NTU3R5bGVSdWxlLHIuQ1NTSW1wb3J0UnVsZT1SYygpLkNTU0ltcG9ydFJ1bGUsci5DU1NHcm91cGluZ1J1bGU9cm4uQ1NTR3JvdXBpbmdSdWxlLHIuQ1NTTWVkaWFSdWxlPUZhLkNTU01lZGlhUnVsZSxyLkNTU0NvbmRpdGlvblJ1bGU9UG4uQ1NTQ29uZGl0aW9uUnVsZSxyLkNTU1N1cHBvcnRzUnVsZT1NYS5DU1NTdXBwb3J0c1J1bGUsci5DU1NGb250RmFjZVJ1bGU9TWMoKS5DU1NGb250RmFjZVJ1bGUsci5DU1NIb3N0UnVsZT1PYy5DU1NIb3N0UnVsZSxyLkNTU1N0eWxlRGVjbGFyYXRpb249bm4oKS5DU1NTdHlsZURlY2xhcmF0aW9uLHIuQ1NTS2V5ZnJhbWVSdWxlPVBhKCkuQ1NTS2V5ZnJhbWVSdWxlLHIuQ1NTS2V5ZnJhbWVzUnVsZT1VYS5DU1NLZXlmcmFtZXNSdWxlLHIuQ1NTVmFsdWVFeHByZXNzaW9uPVBjLkNTU1ZhbHVlRXhwcmVzc2lvbixyLkNTU0RvY3VtZW50UnVsZT1HYy5DU1NEb2N1bWVudFJ1bGUseGF9dmFyIFdjO2Z1bmN0aW9uIG5uKCl7aWYoV2MpcmV0dXJuIGthO1djPTE7dmFyIHI9e307cmV0dXJuIHIuQ1NTU3R5bGVEZWNsYXJhdGlvbj1mdW5jdGlvbigpe3RoaXMubGVuZ3RoPTAsdGhpcy5wYXJlbnRSdWxlPW51bGwsdGhpcy5faW1wb3J0YW50cz17fX0sci5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZT17Y29uc3RydWN0b3I6ci5DU1NTdHlsZURlY2xhcmF0aW9uLGdldFByb3BlcnR5VmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXNbZV18fCIifSxzZXRQcm9wZXJ0eTpmdW5jdGlvbihlLHQsbil7aWYodGhpc1tlXSl7dmFyIHM9QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbCh0aGlzLGUpO3M8MCYmKHRoaXNbdGhpcy5sZW5ndGhdPWUsdGhpcy5sZW5ndGgrKyl9ZWxzZSB0aGlzW3RoaXMubGVuZ3RoXT1lLHRoaXMubGVuZ3RoKys7dGhpc1tlXT10KyIiLHRoaXMuX2ltcG9ydGFudHNbZV09bn0scmVtb3ZlUHJvcGVydHk6ZnVuY3Rpb24oZSl7aWYoIShlIGluIHRoaXMpKXJldHVybiIiO3ZhciB0PUFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwodGhpcyxlKTtpZih0PDApcmV0dXJuIiI7dmFyIG49dGhpc1tlXTtyZXR1cm4gdGhpc1tlXT0iIixBcnJheS5wcm90b3R5cGUuc3BsaWNlLmNhbGwodGhpcyx0LDEpLG59LGdldFByb3BlcnR5Q1NTVmFsdWU6ZnVuY3Rpb24oKXt9LGdldFByb3BlcnR5UHJpb3JpdHk6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2ltcG9ydGFudHNbZV18fCIifSxnZXRQcm9wZXJ0eVNob3J0aGFuZDpmdW5jdGlvbigpe30saXNQcm9wZXJ0eUltcGxpY2l0OmZ1bmN0aW9uKCl7fSxnZXQgY3NzVGV4dCgpe2Zvcih2YXIgZT1bXSx0PTAsbj10aGlzLmxlbmd0aDt0PG47Kyt0KXt2YXIgcz10aGlzW3RdLGk9dGhpcy5nZXRQcm9wZXJ0eVZhbHVlKHMpLGE9dGhpcy5nZXRQcm9wZXJ0eVByaW9yaXR5KHMpO2EmJihhPSIgISIrYSksZVt0XT1zKyI6ICIraSthKyI7In1yZXR1cm4gZS5qb2luKCIgIil9LHNldCBjc3NUZXh0KGUpe3ZhciB0LG47Zm9yKHQ9dGhpcy5sZW5ndGg7dC0tOyluPXRoaXNbdF0sdGhpc1tuXT0iIjtBcnJheS5wcm90b3R5cGUuc3BsaWNlLmNhbGwodGhpcywwLHRoaXMubGVuZ3RoKSx0aGlzLl9pbXBvcnRhbnRzPXt9O3ZhciBzPXIucGFyc2UoIiNib2d1c3siK2UrIn0iKS5jc3NSdWxlc1swXS5zdHlsZSxpPXMubGVuZ3RoO2Zvcih0PTA7dDxpOysrdCluPXNbdF0sdGhpcy5zZXRQcm9wZXJ0eShzW3RdLHMuZ2V0UHJvcGVydHlWYWx1ZShuKSxzLmdldFByb3BlcnR5UHJpb3JpdHkobikpfX0sa2EuQ1NTU3R5bGVEZWNsYXJhdGlvbj1yLkNTU1N0eWxlRGVjbGFyYXRpb24sci5wYXJzZT1HYSgpLnBhcnNlLGthfUtzKCkuQ1NTU3R5bGVTaGVldCxmdC5DU1NSdWxlLFdzKCkuQ1NTU3R5bGVSdWxlLHJuLkNTU0dyb3VwaW5nUnVsZSxQbi5DU1NDb25kaXRpb25SdWxlLEZhLkNTU01lZGlhUnVsZSxNYS5DU1NTdXBwb3J0c1J1bGUsbm4oKS5DU1NTdHlsZURlY2xhcmF0aW9uLFBhKCkuQ1NTS2V5ZnJhbWVSdWxlLFVhLkNTU0tleWZyYW1lc1J1bGUsbm4oKS5DU1NTdHlsZURlY2xhcmF0aW9uLFdzKCkuQ1NTU3R5bGVSdWxlLFJjKCkuQ1NTSW1wb3J0UnVsZSxNYygpLkNTU0ZvbnRGYWNlUnVsZSxLcygpLkNTU1N0eWxlU2hlZXQsUGEoKS5DU1NLZXlmcmFtZVJ1bGU7dmFyIEUyPUdhKCkucGFyc2U7Y29uc3QgS2M9InN0eWxlIjtjbGFzcyBZYyBleHRlbmRzIFFze2NvbnN0cnVjdG9yKGUsdD1LYyl7c3VwZXIoZSx0KSx0aGlzW3pyXT1udWxsfWdldCBzaGVldCgpe2NvbnN0IGU9dGhpc1t6cl07cmV0dXJuIGUhPT1udWxsP2U6dGhpc1t6cl09RTIodGhpcy50ZXh0Q29udGVudCl9Z2V0IGlubmVySFRNTCgpe3JldHVybiBzdXBlci5pbm5lckhUTUx8fCIifXNldCBpbm5lckhUTUwoZSl7c3VwZXIudGV4dENvbnRlbnQ9ZSx0aGlzW3pyXT1udWxsfWdldCBpbm5lclRleHQoKXtyZXR1cm4gc3VwZXIuaW5uZXJUZXh0fHwiIn1zZXQgaW5uZXJUZXh0KGUpe3N1cGVyLnRleHRDb250ZW50PWUsdGhpc1t6cl09bnVsbH1nZXQgdGV4dENvbnRlbnQoKXtyZXR1cm4gc3VwZXIudGV4dENvbnRlbnR8fCIifXNldCB0ZXh0Q29udGVudChlKXtzdXBlci50ZXh0Q29udGVudD1lLHRoaXNbenJdPW51bGx9fVdlKEtjLFljKTtjbGFzcyBaYyBleHRlbmRzIGVle2NvbnN0cnVjdG9yKGUsdD0idGltZSIpe3N1cGVyKGUsdCl9Z2V0IGRhdGVUaW1lKCl7cmV0dXJuIHouZ2V0KHRoaXMsImRhdGV0aW1lIil9c2V0IGRhdGVUaW1lKGUpe3ouc2V0KHRoaXMsImRhdGV0aW1lIixlKX19V2UoInRpbWUiLFpjKTtjbGFzcyB5MiBleHRlbmRzIGVle2NvbnN0cnVjdG9yKGUsdD0iZmllbGRzZXQiKXtzdXBlcihlLHQpfX1jbGFzcyB2MiBleHRlbmRzIGVle2NvbnN0cnVjdG9yKGUsdD0iZW1iZWQiKXtzdXBlcihlLHQpfX1jbGFzcyB3MiBleHRlbmRzIGVle2NvbnN0cnVjdG9yKGUsdD0iaHIiKXtzdXBlcihlLHQpfX1jbGFzcyBEMiBleHRlbmRzIGVle2NvbnN0cnVjdG9yKGUsdD0icHJvZ3Jlc3MiKXtzdXBlcihlLHQpfX1jbGFzcyBJMiBleHRlbmRzIGVle2NvbnN0cnVjdG9yKGUsdD0icCIpe3N1cGVyKGUsdCl9fWNsYXNzIE4yIGV4dGVuZHMgZWV7Y29uc3RydWN0b3IoZSx0PSJ0YWJsZSIpe3N1cGVyKGUsdCl9fWNsYXNzIGsyIGV4dGVuZHMgZWV7Y29uc3RydWN0b3IoZSx0PSJmcmFtZXNldCIpe3N1cGVyKGUsdCl9fWNsYXNzIHgyIGV4dGVuZHMgZWV7Y29uc3RydWN0b3IoZSx0PSJsaSIpe3N1cGVyKGUsdCl9fWNsYXNzIFQyIGV4dGVuZHMgZWV7Y29uc3RydWN0b3IoZSx0PSJiYXNlIil7c3VwZXIoZSx0KX19Y2xhc3MgQjIgZXh0ZW5kcyBlZXtjb25zdHJ1Y3RvcihlLHQ9ImRhdGFsaXN0Iil7c3VwZXIoZSx0KX19Y29uc3QgVmM9ImlucHV0IjtjbGFzcyB6YyBleHRlbmRzIGVle2NvbnN0cnVjdG9yKGUsdD1WYyl7c3VwZXIoZSx0KX1nZXQgYXV0b2ZvY3VzKCl7cmV0dXJuIHZlLmdldCh0aGlzLCJhdXRvZm9jdXMiKXx8LTF9c2V0IGF1dG9mb2N1cyhlKXt2ZS5zZXQodGhpcywiYXV0b2ZvY3VzIixlKX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdmUuZ2V0KHRoaXMsImRpc2FibGVkIil9c2V0IGRpc2FibGVkKGUpe3ZlLnNldCh0aGlzLCJkaXNhYmxlZCIsZSl9Z2V0IG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoIm5hbWUiKX1zZXQgbmFtZShlKXt0aGlzLnNldEF0dHJpYnV0ZSgibmFtZSIsZSl9Z2V0IHBsYWNlaG9sZGVyKCl7cmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIpfXNldCBwbGFjZWhvbGRlcihlKXt0aGlzLnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLGUpfWdldCB0eXBlKCl7cmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKCJ0eXBlIil9c2V0IHR5cGUoZSl7dGhpcy5zZXRBdHRyaWJ1dGUoInR5cGUiLGUpfWdldCB2YWx1ZSgpe3JldHVybiB6LmdldCh0aGlzLCJ2YWx1ZSIpfXNldCB2YWx1ZShlKXt6LnNldCh0aGlzLCJ2YWx1ZSIsZSl9fVdlKFZjLHpjKTtjbGFzcyBfMiBleHRlbmRzIGVle2NvbnN0cnVjdG9yKGUsdD0icGFyYW0iKXtzdXBlcihlLHQpfX1jbGFzcyBSMiBleHRlbmRzIGVle2NvbnN0cnVjdG9yKGUsdD0ibWVkaWEiKXtzdXBlcihlLHQpfX1jbGFzcyBGMiBleHRlbmRzIGVle2NvbnN0cnVjdG9yKGUsdD0iYXVkaW8iKXtzdXBlcihlLHQpfX1jb25zdCBKYz0iaDEiO2NsYXNzIHFjIGV4dGVuZHMgZWV7Y29uc3RydWN0b3IoZSx0PUpjKXtzdXBlcihlLHQpfX1XZShbSmMsImgyIiwiaDMiLCJoNCIsImg1IiwiaDYiXSxxYyk7Y2xhc3MgTTIgZXh0ZW5kcyBlZXtjb25zdHJ1Y3RvcihlLHQ9ImRpciIpe3N1cGVyKGUsdCl9fWNsYXNzIE8yIGV4dGVuZHMgZWV7Y29uc3RydWN0b3IoZSx0PSJxdW90ZSIpe3N1cGVyKGUsdCl9fXZhciBIYT17ZXhwb3J0czp7fX0sTDI9e30sUDI9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsZGVmYXVsdDpMMn0pLFUyPU1oKFAyKSxRYSxqYztmdW5jdGlvbiBHMigpe2lmKGpjKXJldHVybiBRYTtqYz0xO2NsYXNzIHJ7Y29uc3RydWN0b3IodCxuKXt0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9bn1nZXRDb250ZXh0KCl7cmV0dXJuIG51bGx9dG9EYXRhVVJMKCl7cmV0dXJuIiJ9fXJldHVybiBRYT17Y3JlYXRlQ2FudmFzOihlLHQpPT5uZXcgcihlLHQpfSxRYX10cnl7SGEuZXhwb3J0cz1VMn1jYXRjaHtIYS5leHBvcnRzPUcyKCl9dmFyIEgyPUhhLmV4cG9ydHMsUTI9WHMoSDIpO2NvbnN0e2NyZWF0ZUNhbnZhczpXMn09UTIsWGM9ImNhbnZhcyI7Y2xhc3MgJGMgZXh0ZW5kcyBlZXtjb25zdHJ1Y3RvcihlLHQ9WGMpe3N1cGVyKGUsdCksdGhpc1t2dF09VzIoMzAwLDE1MCl9Z2V0IHdpZHRoKCl7cmV0dXJuIHRoaXNbdnRdLndpZHRofXNldCB3aWR0aChlKXt1ci5zZXQodGhpcywid2lkdGgiLGUpLHRoaXNbdnRdLndpZHRoPWV9Z2V0IGhlaWdodCgpe3JldHVybiB0aGlzW3Z0XS5oZWlnaHR9c2V0IGhlaWdodChlKXt1ci5zZXQodGhpcywiaGVpZ2h0IixlKSx0aGlzW3Z0XS5oZWlnaHQ9ZX1nZXRDb250ZXh0KGUpe3JldHVybiB0aGlzW3Z0XS5nZXRDb250ZXh0KGUpfXRvRGF0YVVSTCguLi5lKXtyZXR1cm4gdGhpc1t2dF0udG9EYXRhVVJMKC4uLmUpfX1XZShYYywkYyk7Y2xhc3MgSzIgZXh0ZW5kcyBlZXtjb25zdHJ1Y3RvcihlLHQ9ImxlZ2VuZCIpe3N1cGVyKGUsdCl9fWNvbnN0IGVoPSJvcHRpb24iO2NsYXNzIHRoIGV4dGVuZHMgZWV7Y29uc3RydWN0b3IoZSx0PWVoKXtzdXBlcihlLHQpfWdldCB2YWx1ZSgpe3JldHVybiB6LmdldCh0aGlzLCJ2YWx1ZSIpfXNldCB2YWx1ZShlKXt6LnNldCh0aGlzLCJ2YWx1ZSIsZSl9Z2V0IHNlbGVjdGVkKCl7cmV0dXJuIHZlLmdldCh0aGlzLCJzZWxlY3RlZCIpfXNldCBzZWxlY3RlZChlKXtjb25zdCB0PXRoaXMucGFyZW50RWxlbWVudD8ucXVlcnlTZWxlY3Rvcigib3B0aW9uW3NlbGVjdGVkXSIpO3QmJnQhPT10aGlzJiYodC5zZWxlY3RlZD0hMSksdmUuc2V0KHRoaXMsInNlbGVjdGVkIixlKX19V2UoZWgsdGgpO2NsYXNzIFkyIGV4dGVuZHMgZWV7Y29uc3RydWN0b3IoZSx0PSJzcGFuIil7c3VwZXIoZSx0KX19Y2xhc3MgWjIgZXh0ZW5kcyBlZXtjb25zdHJ1Y3RvcihlLHQ9Im1ldGVyIil7c3VwZXIoZSx0KX19Y2xhc3MgVjIgZXh0ZW5kcyBlZXtjb25zdHJ1Y3RvcihlLHQ9InZpZGVvIil7c3VwZXIoZSx0KX19Y2xhc3MgejIgZXh0ZW5kcyBlZXtjb25zdHJ1Y3RvcihlLHQ9InRkIil7c3VwZXIoZSx0KX19Y29uc3Qgcmg9InRpdGxlIjtjbGFzcyBuaCBleHRlbmRzIFFze2NvbnN0cnVjdG9yKGUsdD1yaCl7c3VwZXIoZSx0KX19V2UocmgsbmgpO2NsYXNzIEoyIGV4dGVuZHMgZWV7Y29uc3RydWN0b3IoZSx0PSJvdXRwdXQiKXtzdXBlcihlLHQpfX1jbGFzcyBxMiBleHRlbmRzIGVle2NvbnN0cnVjdG9yKGUsdD0idHIiKXtzdXBlcihlLHQpfX1jbGFzcyBqMiBleHRlbmRzIGVle2NvbnN0cnVjdG9yKGUsdD0iZGF0YSIpe3N1cGVyKGUsdCl9fWNsYXNzIFgyIGV4dGVuZHMgZWV7Y29uc3RydWN0b3IoZSx0PSJtZW51Iil7c3VwZXIoZSx0KX19Y29uc3Qgc2g9InNlbGVjdCI7Y2xhc3MgaWggZXh0ZW5kcyBlZXtjb25zdHJ1Y3RvcihlLHQ9c2gpe3N1cGVyKGUsdCl9Z2V0IG9wdGlvbnMoKXtsZXQgZT1uZXcgRnQse2ZpcnN0RWxlbWVudENoaWxkOnR9PXRoaXM7Zm9yKDt0Oyl0LnRhZ05hbWU9PT0iT1BUR1JPVVAiP2UucHVzaCguLi50LmNoaWxkcmVuKTplLnB1c2godCksdD10Lm5leHRFbGVtZW50U2libGluZztyZXR1cm4gZX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdmUuZ2V0KHRoaXMsImRpc2FibGVkIil9c2V0IGRpc2FibGVkKGUpe3ZlLnNldCh0aGlzLCJkaXNhYmxlZCIsZSl9Z2V0IG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoIm5hbWUiKX1zZXQgbmFtZShlKXt0aGlzLnNldEF0dHJpYnV0ZSgibmFtZSIsZSl9Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3Rvcigib3B0aW9uW3NlbGVjdGVkXSIpPy52YWx1ZX19V2Uoc2gsaWgpO2NsYXNzICQyIGV4dGVuZHMgZWV7Y29uc3RydWN0b3IoZSx0PSJiciIpe3N1cGVyKGUsdCl9fWNvbnN0IGFoPSJidXR0b24iO2NsYXNzIG9oIGV4dGVuZHMgZWV7Y29uc3RydWN0b3IoZSx0PWFoKXtzdXBlcihlLHQpfWdldCBkaXNhYmxlZCgpe3JldHVybiB2ZS5nZXQodGhpcywiZGlzYWJsZWQiKX1zZXQgZGlzYWJsZWQoZSl7dmUuc2V0KHRoaXMsImRpc2FibGVkIixlKX1nZXQgbmFtZSgpe3JldHVybiB0aGlzLmdldEF0dHJpYnV0ZSgibmFtZSIpfXNldCBuYW1lKGUpe3RoaXMuc2V0QXR0cmlidXRlKCJuYW1lIixlKX1nZXQgdHlwZSgpe3JldHVybiB0aGlzLmdldEF0dHJpYnV0ZSgidHlwZSIpfXNldCB0eXBlKGUpe3RoaXMuc2V0QXR0cmlidXRlKCJ0eXBlIixlKX19V2UoYWgsb2gpO2NsYXNzIGViIGV4dGVuZHMgZWV7Y29uc3RydWN0b3IoZSx0PSJtYXAiKXtzdXBlcihlLHQpfX1jbGFzcyB0YiBleHRlbmRzIGVle2NvbnN0cnVjdG9yKGUsdD0ib3B0Z3JvdXAiKXtzdXBlcihlLHQpfX1jbGFzcyByYiBleHRlbmRzIGVle2NvbnN0cnVjdG9yKGUsdD0iZGwiKXtzdXBlcihlLHQpfX1jb25zdCB1aD0idGV4dGFyZWEiO2NsYXNzIGxoIGV4dGVuZHMgUXN7Y29uc3RydWN0b3IoZSx0PXVoKXtzdXBlcihlLHQpfWdldCBkaXNhYmxlZCgpe3JldHVybiB2ZS5nZXQodGhpcywiZGlzYWJsZWQiKX1zZXQgZGlzYWJsZWQoZSl7dmUuc2V0KHRoaXMsImRpc2FibGVkIixlKX1nZXQgbmFtZSgpe3JldHVybiB0aGlzLmdldEF0dHJpYnV0ZSgibmFtZSIpfXNldCBuYW1lKGUpe3RoaXMuc2V0QXR0cmlidXRlKCJuYW1lIixlKX1nZXQgcGxhY2Vob2xkZXIoKXtyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIil9c2V0IHBsYWNlaG9sZGVyKGUpe3RoaXMuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsZSl9Z2V0IHR5cGUoKXtyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoInR5cGUiKX1zZXQgdHlwZShlKXt0aGlzLnNldEF0dHJpYnV0ZSgidHlwZSIsZSl9Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMudGV4dENvbnRlbnR9c2V0IHZhbHVlKGUpe3RoaXMudGV4dENvbnRlbnQ9ZX19V2UodWgsbGgpO2NsYXNzIG5iIGV4dGVuZHMgZWV7Y29uc3RydWN0b3IoZSx0PSJmb250Iil7c3VwZXIoZSx0KX19Y2xhc3Mgc2IgZXh0ZW5kcyBlZXtjb25zdHJ1Y3RvcihlLHQ9ImRpdiIpe3N1cGVyKGUsdCl9fWNvbnN0IGNoPSJsaW5rIjtjbGFzcyBoaCBleHRlbmRzIGVle2NvbnN0cnVjdG9yKGUsdD1jaCl7c3VwZXIoZSx0KX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdmUuZ2V0KHRoaXMsImRpc2FibGVkIil9c2V0IGRpc2FibGVkKGUpe3ZlLnNldCh0aGlzLCJkaXNhYmxlZCIsZSl9Z2V0IGhyZWYoKXtyZXR1cm4gei5nZXQodGhpcywiaHJlZiIpLnRyaW0oKX1zZXQgaHJlZihlKXt6LnNldCh0aGlzLCJocmVmIixlKX1nZXQgaHJlZmxhbmcoKXtyZXR1cm4gei5nZXQodGhpcywiaHJlZmxhbmciKX1zZXQgaHJlZmxhbmcoZSl7ei5zZXQodGhpcywiaHJlZmxhbmciLGUpfWdldCBtZWRpYSgpe3JldHVybiB6LmdldCh0aGlzLCJtZWRpYSIpfXNldCBtZWRpYShlKXt6LnNldCh0aGlzLCJtZWRpYSIsZSl9Z2V0IHJlbCgpe3JldHVybiB6LmdldCh0aGlzLCJyZWwiKX1zZXQgcmVsKGUpe3ouc2V0KHRoaXMsInJlbCIsZSl9Z2V0IHR5cGUoKXtyZXR1cm4gei5nZXQodGhpcywidHlwZSIpfXNldCB0eXBlKGUpe3ouc2V0KHRoaXMsInR5cGUiLGUpfX1XZShjaCxoaCk7Y29uc3QgQWg9InNsb3QiO2NsYXNzIGRoIGV4dGVuZHMgZWV7Y29uc3RydWN0b3IoZSx0PUFoKXtzdXBlcihlLHQpfWdldCBuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKCJuYW1lIil9c2V0IG5hbWUoZSl7dGhpcy5zZXRBdHRyaWJ1dGUoIm5hbWUiLGUpfWFzc2lnbigpe31hc3NpZ25lZE5vZGVzKGUpe2NvbnN0IHQ9ISF0aGlzLm5hbWUsbj10aGlzLmdldFJvb3ROb2RlKCkuaG9zdD8uY2hpbGROb2Rlcz8/W107bGV0IHM7aWYodD9zPVsuLi5uXS5maWx0ZXIoaT0+aS5zbG90PT09dGhpcy5uYW1lKTpzPVsuLi5uXS5maWx0ZXIoaT0+IWkuc2xvdCksZT8uZmxhdHRlbil7Y29uc3QgaT1bXTtmb3IobGV0IGEgb2YgcylhLmxvY2FsTmFtZT09PSJzbG90Ij9pLnB1c2goLi4uYS5hc3NpZ25lZE5vZGVzKHtmbGF0dGVuOiEwfSkpOmkucHVzaChhKTtzPWl9cmV0dXJuIHMubGVuZ3RoP3M6Wy4uLnRoaXMuY2hpbGROb2Rlc119YXNzaWduZWRFbGVtZW50cyhlKXtjb25zdCB0PXRoaXMuYXNzaWduZWROb2RlcyhlKS5maWx0ZXIobj0+bi5ub2RlVHlwZT09PTEpO3JldHVybiB0Lmxlbmd0aD90OlsuLi50aGlzLmNoaWxkcmVuXX19V2UoQWgsZGgpO2NsYXNzIGliIGV4dGVuZHMgZWV7Y29uc3RydWN0b3IoZSx0PSJmb3JtIil7c3VwZXIoZSx0KX19Y29uc3QgZmg9ImltZyI7Y2xhc3MgV2EgZXh0ZW5kcyBlZXtjb25zdHJ1Y3RvcihlLHQ9Zmgpe3N1cGVyKGUsdCl9Z2V0IGFsdCgpe3JldHVybiB6LmdldCh0aGlzLCJhbHQiKX1zZXQgYWx0KGUpe3ouc2V0KHRoaXMsImFsdCIsZSl9Z2V0IHNpemVzKCl7cmV0dXJuIHouZ2V0KHRoaXMsInNpemVzIil9c2V0IHNpemVzKGUpe3ouc2V0KHRoaXMsInNpemVzIixlKX1nZXQgc3JjKCl7cmV0dXJuIHouZ2V0KHRoaXMsInNyYyIpfXNldCBzcmMoZSl7ei5zZXQodGhpcywic3JjIixlKX1nZXQgc3Jjc2V0KCl7cmV0dXJuIHouZ2V0KHRoaXMsInNyY3NldCIpfXNldCBzcmNzZXQoZSl7ei5zZXQodGhpcywic3Jjc2V0IixlKX1nZXQgdGl0bGUoKXtyZXR1cm4gei5nZXQodGhpcywidGl0bGUiKX1zZXQgdGl0bGUoZSl7ei5zZXQodGhpcywidGl0bGUiLGUpfWdldCB3aWR0aCgpe3JldHVybiB1ci5nZXQodGhpcywid2lkdGgiKX1zZXQgd2lkdGgoZSl7dXIuc2V0KHRoaXMsIndpZHRoIixlKX1nZXQgaGVpZ2h0KCl7cmV0dXJuIHVyLmdldCh0aGlzLCJoZWlnaHQiKX1zZXQgaGVpZ2h0KGUpe3VyLnNldCh0aGlzLCJoZWlnaHQiLGUpfX1XZShmaCxXYSk7Y2xhc3MgYWIgZXh0ZW5kcyBlZXtjb25zdHJ1Y3RvcihlLHQ9InByZSIpe3N1cGVyKGUsdCl9fWNsYXNzIG9iIGV4dGVuZHMgZWV7Y29uc3RydWN0b3IoZSx0PSJ1bCIpe3N1cGVyKGUsdCl9fWNvbnN0IHBoPSJtZXRhIjtjbGFzcyBnaCBleHRlbmRzIGVle2NvbnN0cnVjdG9yKGUsdD1waCl7c3VwZXIoZSx0KX1nZXQgbmFtZSgpe3JldHVybiB6LmdldCh0aGlzLCJuYW1lIil9c2V0IG5hbWUoZSl7ei5zZXQodGhpcywibmFtZSIsZSl9Z2V0IGh0dHBFcXVpdigpe3JldHVybiB6LmdldCh0aGlzLCJodHRwLWVxdWl2Iil9c2V0IGh0dHBFcXVpdihlKXt6LnNldCh0aGlzLCJodHRwLWVxdWl2IixlKX1nZXQgY29udGVudCgpe3JldHVybiB6LmdldCh0aGlzLCJjb250ZW50Iil9c2V0IGNvbnRlbnQoZSl7ei5zZXQodGhpcywiY29udGVudCIsZSl9Z2V0IGNoYXJzZXQoKXtyZXR1cm4gei5nZXQodGhpcywiY2hhcnNldCIpfXNldCBjaGFyc2V0KGUpe3ouc2V0KHRoaXMsImNoYXJzZXQiLGUpfWdldCBtZWRpYSgpe3JldHVybiB6LmdldCh0aGlzLCJtZWRpYSIpfXNldCBtZWRpYShlKXt6LnNldCh0aGlzLCJtZWRpYSIsZSl9fVdlKHBoLGdoKTtjbGFzcyB1YiBleHRlbmRzIGVle2NvbnN0cnVjdG9yKGUsdD0icGljdHVyZSIpe3N1cGVyKGUsdCl9fWNsYXNzIGxiIGV4dGVuZHMgZWV7Y29uc3RydWN0b3IoZSx0PSJhcmVhIil7c3VwZXIoZSx0KX19Y2xhc3MgY2IgZXh0ZW5kcyBlZXtjb25zdHJ1Y3RvcihlLHQ9Im9sIil7c3VwZXIoZSx0KX19Y2xhc3MgaGIgZXh0ZW5kcyBlZXtjb25zdHJ1Y3RvcihlLHQ9ImNhcHRpb24iKXtzdXBlcihlLHQpfX1jb25zdCBtaD0iYSI7Y2xhc3MgYmggZXh0ZW5kcyBlZXtjb25zdHJ1Y3RvcihlLHQ9bWgpe3N1cGVyKGUsdCl9Z2V0IGhyZWYoKXtyZXR1cm4gZW5jb2RlVVJJKGRlY29kZVVSSSh6LmdldCh0aGlzLCJocmVmIikpKS50cmltKCl9c2V0IGhyZWYoZSl7ei5zZXQodGhpcywiaHJlZiIsZGVjb2RlVVJJKGUpKX1nZXQgZG93bmxvYWQoKXtyZXR1cm4gZW5jb2RlVVJJKGRlY29kZVVSSSh6LmdldCh0aGlzLCJkb3dubG9hZCIpKSl9c2V0IGRvd25sb2FkKGUpe3ouc2V0KHRoaXMsImRvd25sb2FkIixkZWNvZGVVUkkoZSkpfWdldCB0YXJnZXQoKXtyZXR1cm4gei5nZXQodGhpcywidGFyZ2V0Iil9c2V0IHRhcmdldChlKXt6LnNldCh0aGlzLCJ0YXJnZXQiLGUpfWdldCB0eXBlKCl7cmV0dXJuIHouZ2V0KHRoaXMsInR5cGUiKX1zZXQgdHlwZShlKXt6LnNldCh0aGlzLCJ0eXBlIixlKX1nZXQgcmVsKCl7cmV0dXJuIHouZ2V0KHRoaXMsInJlbCIpfXNldCByZWwoZSl7ei5zZXQodGhpcywicmVsIixlKX19V2UobWgsYmgpO2NsYXNzIEFiIGV4dGVuZHMgZWV7Y29uc3RydWN0b3IoZSx0PSJsYWJlbCIpe3N1cGVyKGUsdCl9fWNsYXNzIGRiIGV4dGVuZHMgZWV7Y29uc3RydWN0b3IoZSx0PSJ1bmtub3duIil7c3VwZXIoZSx0KX19Y2xhc3MgZmIgZXh0ZW5kcyBlZXtjb25zdHJ1Y3RvcihlLHQ9Im1vZCIpe3N1cGVyKGUsdCl9fWNsYXNzIHBiIGV4dGVuZHMgZWV7Y29uc3RydWN0b3IoZSx0PSJkZXRhaWxzIil7c3VwZXIoZSx0KX19Y29uc3QgQ2g9InNvdXJjZSI7Y2xhc3MgU2ggZXh0ZW5kcyBlZXtjb25zdHJ1Y3RvcihlLHQ9Q2gpe3N1cGVyKGUsdCl9Z2V0IHNyYygpe3JldHVybiB6LmdldCh0aGlzLCJzcmMiKX1zZXQgc3JjKGUpe3ouc2V0KHRoaXMsInNyYyIsZSl9Z2V0IHNyY3NldCgpe3JldHVybiB6LmdldCh0aGlzLCJzcmNzZXQiKX1zZXQgc3Jjc2V0KGUpe3ouc2V0KHRoaXMsInNyY3NldCIsZSl9Z2V0IHNpemVzKCl7cmV0dXJuIHouZ2V0KHRoaXMsInNpemVzIil9c2V0IHNpemVzKGUpe3ouc2V0KHRoaXMsInNpemVzIixlKX1nZXQgdHlwZSgpe3JldHVybiB6LmdldCh0aGlzLCJ0eXBlIil9c2V0IHR5cGUoZSl7ei5zZXQodGhpcywidHlwZSIsZSl9fVdlKENoLFNoKTtjbGFzcyBnYiBleHRlbmRzIGVle2NvbnN0cnVjdG9yKGUsdD0idHJhY2siKXtzdXBlcihlLHQpfX1jbGFzcyBtYiBleHRlbmRzIGVle2NvbnN0cnVjdG9yKGUsdD0ibWFycXVlZSIpe3N1cGVyKGUsdCl9fWNvbnN0IGJiPXtIVE1MRWxlbWVudDplZSxIVE1MVGVtcGxhdGVFbGVtZW50OnZjLEhUTUxIdG1sRWxlbWVudDpwMixIVE1MU2NyaXB0RWxlbWVudDpEYyxIVE1MRnJhbWVFbGVtZW50Om0yLEhUTUxJRnJhbWVFbGVtZW50Ok5jLEhUTUxPYmplY3RFbGVtZW50OmIyLEhUTUxIZWFkRWxlbWVudDpDMixIVE1MQm9keUVsZW1lbnQ6UzIsSFRNTFN0eWxlRWxlbWVudDpZYyxIVE1MVGltZUVsZW1lbnQ6WmMsSFRNTEZpZWxkU2V0RWxlbWVudDp5MixIVE1MRW1iZWRFbGVtZW50OnYyLEhUTUxIUkVsZW1lbnQ6dzIsSFRNTFByb2dyZXNzRWxlbWVudDpEMixIVE1MUGFyYWdyYXBoRWxlbWVudDpJMixIVE1MVGFibGVFbGVtZW50Ok4yLEhUTUxGcmFtZVNldEVsZW1lbnQ6azIsSFRNTExJRWxlbWVudDp4MixIVE1MQmFzZUVsZW1lbnQ6VDIsSFRNTERhdGFMaXN0RWxlbWVudDpCMixIVE1MSW5wdXRFbGVtZW50OnpjLEhUTUxQYXJhbUVsZW1lbnQ6XzIsSFRNTE1lZGlhRWxlbWVudDpSMixIVE1MQXVkaW9FbGVtZW50OkYyLEhUTUxIZWFkaW5nRWxlbWVudDpxYyxIVE1MRGlyZWN0b3J5RWxlbWVudDpNMixIVE1MUXVvdGVFbGVtZW50Ok8yLEhUTUxDYW52YXNFbGVtZW50OiRjLEhUTUxMZWdlbmRFbGVtZW50OksyLEhUTUxPcHRpb25FbGVtZW50OnRoLEhUTUxTcGFuRWxlbWVudDpZMixIVE1MTWV0ZXJFbGVtZW50OloyLEhUTUxWaWRlb0VsZW1lbnQ6VjIsSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6ejIsSFRNTFRpdGxlRWxlbWVudDpuaCxIVE1MT3V0cHV0RWxlbWVudDpKMixIVE1MVGFibGVSb3dFbGVtZW50OnEyLEhUTUxEYXRhRWxlbWVudDpqMixIVE1MTWVudUVsZW1lbnQ6WDIsSFRNTFNlbGVjdEVsZW1lbnQ6aWgsSFRNTEJSRWxlbWVudDokMixIVE1MQnV0dG9uRWxlbWVudDpvaCxIVE1MTWFwRWxlbWVudDplYixIVE1MT3B0R3JvdXBFbGVtZW50OnRiLEhUTUxETGlzdEVsZW1lbnQ6cmIsSFRNTFRleHRBcmVhRWxlbWVudDpsaCxIVE1MRm9udEVsZW1lbnQ6bmIsSFRNTERpdkVsZW1lbnQ6c2IsSFRNTExpbmtFbGVtZW50OmhoLEhUTUxTbG90RWxlbWVudDpkaCxIVE1MRm9ybUVsZW1lbnQ6aWIsSFRNTEltYWdlRWxlbWVudDpXYSxIVE1MUHJlRWxlbWVudDphYixIVE1MVUxpc3RFbGVtZW50Om9iLEhUTUxNZXRhRWxlbWVudDpnaCxIVE1MUGljdHVyZUVsZW1lbnQ6dWIsSFRNTEFyZWFFbGVtZW50OmxiLEhUTUxPTGlzdEVsZW1lbnQ6Y2IsSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQ6aGIsSFRNTEFuY2hvckVsZW1lbnQ6YmgsSFRNTExhYmVsRWxlbWVudDpBYixIVE1MVW5rbm93bkVsZW1lbnQ6ZGIsSFRNTE1vZEVsZW1lbnQ6ZmIsSFRNTERldGFpbHNFbGVtZW50OnBiLEhUTUxTb3VyY2VFbGVtZW50OlNoLEhUTUxUcmFja0VsZW1lbnQ6Z2IsSFRNTE1hcnF1ZWVFbGVtZW50Om1ifSx6cz17dGVzdDooKT0+ITB9LENiPXsidGV4dC9odG1sIjp7ZG9jVHlwZToiPCFET0NUWVBFIGh0bWw+IixpZ25vcmVDYXNlOiEwLHZvaWRFbGVtZW50czovXig/OmFyZWF8YmFzZXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGtleWdlbnxsaW5rfG1lbnVpdGVtfG1ldGF8cGFyYW18c291cmNlfHRyYWNrfHdicikkL2l9LCJpbWFnZS9zdmcreG1sIjp7ZG9jVHlwZTonPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4nLGlnbm9yZUNhc2U6ITEsdm9pZEVsZW1lbnRzOnpzfSwidGV4dC94bWwiOntkb2NUeXBlOic8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PicsaWdub3JlQ2FzZTohMSx2b2lkRWxlbWVudHM6enN9LCJhcHBsaWNhdGlvbi94bWwiOntkb2NUeXBlOic8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PicsaWdub3JlQ2FzZTohMSx2b2lkRWxlbWVudHM6enN9LCJhcHBsaWNhdGlvbi94aHRtbCt4bWwiOntkb2NUeXBlOic8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PicsaWdub3JlQ2FzZTohMSx2b2lkRWxlbWVudHM6enN9fTtjbGFzcyBFaCBleHRlbmRzIERye2NvbnN0cnVjdG9yKGUsdD17fSl7c3VwZXIoZSx0KSx0aGlzLmRldGFpbD10LmRldGFpbH19Y2xhc3MgU2IgZXh0ZW5kcyBEcntjb25zdHJ1Y3RvcihlLHQ9e30pe3N1cGVyKGUsdCksdGhpcy5pbnB1dFR5cGU9dC5pbnB1dFR5cGUsdGhpcy5kYXRhPXQuZGF0YSx0aGlzLmRhdGFUcmFuc2Zlcj10LmRhdGFUcmFuc2Zlcix0aGlzLmlzQ29tcG9zaW5nPXQuaXNDb21wb3Npbmd8fCExLHRoaXMucmFuZ2VzPXQucmFuZ2VzfX1jb25zdCBFYj1yPT5jbGFzcyBleHRlbmRzIFdhe2NvbnN0cnVjdG9yKHQsbil7c3dpdGNoKHN1cGVyKHIpLGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMTp0aGlzLmhlaWdodD10LHRoaXMud2lkdGg9dDticmVhaztjYXNlIDI6dGhpcy5oZWlnaHQ9bix0aGlzLndpZHRoPXQ7YnJlYWt9fX0seWg9KHtbYXRdOnIsW2llXTplfSx0PW51bGwpPT57aGwocltZZV0sZVskXSk7ZG97Y29uc3Qgbj11dChyKSxzPW49PT1lP246blskXTt0P3QuaW5zZXJ0QmVmb3JlKHIsdFtpZV0pOnIucmVtb3ZlKCkscj1zfXdoaWxlKHIhPT1lKX07bGV0IHliPWNsYXNzIFJoe2NvbnN0cnVjdG9yKCl7dGhpc1thdF09bnVsbCx0aGlzW2llXT1udWxsLHRoaXMuY29tbW9uQW5jZXN0b3JDb250YWluZXI9bnVsbH1pbnNlcnROb2RlKGUpe3RoaXNbaWVdLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsdGhpc1thdF0pfXNlbGVjdE5vZGUoZSl7dGhpc1thdF09ZSx0aGlzW2llXT11dChlKX1zZWxlY3ROb2RlQ29udGVudHMoZSl7dGhpcy5zZWxlY3ROb2RlKGUpLHRoaXMuY29tbW9uQW5jZXN0b3JDb250YWluZXI9ZX1zdXJyb3VuZENvbnRlbnRzKGUpe2UucmVwbGFjZUNoaWxkcmVuKHRoaXMuZXh0cmFjdENvbnRlbnRzKCkpfXNldFN0YXJ0QmVmb3JlKGUpe3RoaXNbYXRdPWV9c2V0U3RhcnRBZnRlcihlKXt0aGlzW2F0XT1lLm5leHRTaWJsaW5nfXNldEVuZEJlZm9yZShlKXt0aGlzW2llXT11dChlLnByZXZpb3VzU2libGluZyl9c2V0RW5kQWZ0ZXIoZSl7dGhpc1tpZV09dXQoZSl9Y2xvbmVDb250ZW50cygpe2xldHtbYXRdOmUsW2llXTp0fT10aGlzO2NvbnN0IG49ZS5vd25lckRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtmb3IoO2UhPT10OyluLmluc2VydEJlZm9yZShlLmNsb25lTm9kZSghMCksbltpZV0pLGU9dXQoZSksZSE9PXQmJihlPWVbJF0pO3JldHVybiBufWRlbGV0ZUNvbnRlbnRzKCl7eWgodGhpcyl9ZXh0cmFjdENvbnRlbnRzKCl7Y29uc3QgZT10aGlzW2F0XS5vd25lckRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtyZXR1cm4geWgodGhpcyxlKSxlfWNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChlKXtjb25zdHtjb21tb25BbmNlc3RvckNvbnRhaW5lcjp0fT10aGlzLG49Im93bmVyU1ZHRWxlbWVudCJpbiB0LHM9bj90Lm93bmVyRG9jdW1lbnQ6dDtsZXQgaT1BbChzLGUpO2lmKG4pe2NvbnN0IGE9Wy4uLmkuY2hpbGROb2Rlc107aT1zLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxPYmplY3Quc2V0UHJvdG90eXBlT2YoaSxPbi5wcm90b3R5cGUpLGkub3duZXJTVkdFbGVtZW50PXM7Zm9yKGNvbnN0IG8gb2YgYSlPYmplY3Quc2V0UHJvdG90eXBlT2YobyxPbi5wcm90b3R5cGUpLG8ub3duZXJTVkdFbGVtZW50PXMsaS5hcHBlbmRDaGlsZChvKX1lbHNlIHRoaXMuc2VsZWN0Tm9kZShpKTtyZXR1cm4gaX1jbG9uZVJhbmdlKCl7Y29uc3QgZT1uZXcgUmg7cmV0dXJuIGVbYXRdPXRoaXNbYXRdLGVbaWVdPXRoaXNbaWVdLGV9fTtjb25zdCB2Yj0oe25vZGVUeXBlOnJ9LGUpPT57c3dpdGNoKHIpe2Nhc2UgeWU6cmV0dXJuIGUmbWc7Y2FzZSBYZTpyZXR1cm4gZSZiZztjYXNlIEt0OnJldHVybiBlJlNnO2Nhc2UgUnQ6cmV0dXJuIGUmQ2d9cmV0dXJuIDB9O2NsYXNzIHdie2NvbnN0cnVjdG9yKGUsdD1nZyl7dGhpcy5yb290PWUsdGhpcy5jdXJyZW50Tm9kZT1lLHRoaXMud2hhdFRvU2hvdz10O2xldHtbJF06bixbaWVdOnN9PWU7aWYoZS5ub2RlVHlwZT09PW1yKXtjb25zdHtkb2N1bWVudEVsZW1lbnQ6YX09ZTtuPWEscz1hW2llXX1jb25zdCBpPVtdO2Zvcig7biYmbiE9PXM7KXZiKG4sdCkmJmkucHVzaChuKSxuPW5bJF07dGhpc1tqZV09e2k6MCxub2RlczppfX1uZXh0Tm9kZSgpe2NvbnN0IGU9dGhpc1tqZV07cmV0dXJuIHRoaXMuY3VycmVudE5vZGU9ZS5pPGUubm9kZXMubGVuZ3RoP2Uubm9kZXNbZS5pKytdOm51bGwsdGhpcy5jdXJyZW50Tm9kZX19Y29uc3Qgdmg9KHIsZSx0KT0+e2xldHtbJF06bixbaWVdOnN9PWU7cmV0dXJuIHIuY2FsbCh7b3duZXJEb2N1bWVudDplLFskXTpuLFtpZV06c30sdCl9LHdoPURnKHt9LGYyLGJiLHtDdXN0b21FdmVudDpFaCxFdmVudDpEcixFdmVudFRhcmdldDpXaSxJbnB1dEV2ZW50OlNiLE5hbWVkTm9kZU1hcDpTYyxOb2RlTGlzdDpGdH0pLEpzPW5ldyBXZWFrTWFwO2xldCBJcj1jbGFzcyBleHRlbmRzIGhhe2NvbnN0cnVjdG9yKGUpe3N1cGVyKG51bGwsIiNkb2N1bWVudCIsbXIpLHRoaXNbeXRdPXthY3RpdmU6ITEscmVnaXN0cnk6bnVsbH0sdGhpc1tucl09e2FjdGl2ZTohMSxjbGFzczpudWxsfSx0aGlzW1ZyXT1DYltlXSx0aGlzW3ByXT1udWxsLHRoaXNbd2ldPW51bGwsdGhpc1tkc109bnVsbCx0aGlzW3Z0XT1udWxsLHRoaXNbdm5dPW51bGx9Z2V0IGRlZmF1bHRWaWV3KCl7cmV0dXJuIEpzLmhhcyh0aGlzKXx8SnMuc2V0KHRoaXMsbmV3IFByb3h5KGdsb2JhbFRoaXMse3NldDooZSx0LG4pPT57c3dpdGNoKHQpe2Nhc2UiYWRkRXZlbnRMaXN0ZW5lciI6Y2FzZSJyZW1vdmVFdmVudExpc3RlbmVyIjpjYXNlImRpc3BhdGNoRXZlbnQiOnRoaXNbeW5dW3RdPW47YnJlYWs7ZGVmYXVsdDplW3RdPW47YnJlYWt9cmV0dXJuITB9LGdldDooZSx0KT0+e3N3aXRjaCh0KXtjYXNlImFkZEV2ZW50TGlzdGVuZXIiOmNhc2UicmVtb3ZlRXZlbnRMaXN0ZW5lciI6Y2FzZSJkaXNwYXRjaEV2ZW50IjppZighdGhpc1t5bl0pe2NvbnN0IG49dGhpc1t5bl09bmV3IFdpO24uZGlzcGF0Y2hFdmVudD1uLmRpc3BhdGNoRXZlbnQuYmluZChuKSxuLmFkZEV2ZW50TGlzdGVuZXI9bi5hZGRFdmVudExpc3RlbmVyLmJpbmQobiksbi5yZW1vdmVFdmVudExpc3RlbmVyPW4ucmVtb3ZlRXZlbnRMaXN0ZW5lci5iaW5kKG4pfXJldHVybiB0aGlzW3luXVt0XTtjYXNlImRvY3VtZW50IjpyZXR1cm4gdGhpcztjYXNlIm5hdmlnYXRvciI6cmV0dXJue3VzZXJBZ2VudDoiTW96aWxsYS81LjAgKFgxMTsgTGludXggeDg2XzY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvODguMC40MzI0LjE1MCBTYWZhcmkvNTM3LjM2In07Y2FzZSJ3aW5kb3ciOnJldHVybiBKcy5nZXQodGhpcyk7Y2FzZSJjdXN0b21FbGVtZW50cyI6cmV0dXJuIHRoaXNbeXRdLnJlZ2lzdHJ5fHwodGhpc1t5dF09bmV3IEJnKHRoaXMpKSx0aGlzW3l0XTtjYXNlInBlcmZvcm1hbmNlIjpyZXR1cm4gZS5wZXJmb3JtYW5jZTtjYXNlIkRPTVBhcnNlciI6cmV0dXJuIHRoaXNbd2ldO2Nhc2UiSW1hZ2UiOnJldHVybiB0aGlzW3Z0XXx8KHRoaXNbdnRdPUViKHRoaXMpKSx0aGlzW3Z0XTtjYXNlIk11dGF0aW9uT2JzZXJ2ZXIiOnJldHVybiB0aGlzW25yXS5jbGFzc3x8KHRoaXNbbnJdPW5ldyBNZyh0aGlzKSksdGhpc1tucl0uY2xhc3N9cmV0dXJuIHRoaXNbZHNdJiZ0aGlzW2RzXVt0XXx8d2hbdF18fGVbdF19fSkpLEpzLmdldCh0aGlzKX1nZXQgZG9jdHlwZSgpe2NvbnN0IGU9dGhpc1twcl07aWYoZSlyZXR1cm4gZTtjb25zdHtmaXJzdENoaWxkOnR9PXRoaXM7cmV0dXJuIHQmJnQubm9kZVR5cGU9PT1qcj90aGlzW3ByXT10Om51bGx9c2V0IGRvY3R5cGUoZSl7aWYoL14oW2EtejpdKykoXHMrc3lzdGVtfFxzK3B1YmxpYyhccysiKFteIl0rKSIpPyk/KFxzKyIoW14iXSspIik/L2kudGVzdChlKSl7Y29uc3R7JDE6dCwkNDpuLCQ2OnN9PVJlZ0V4cDt0aGlzW3ByXT1uZXcgT3ModGhpcyx0LG4scyksdnModGhpcyx0aGlzW3ByXSx0aGlzWyRdKX19Z2V0IGRvY3VtZW50RWxlbWVudCgpe3JldHVybiB0aGlzLmZpcnN0RWxlbWVudENoaWxkfWdldCBpc0Nvbm5lY3RlZCgpe3JldHVybiEwfV9nZXRQYXJlbnQoKXtyZXR1cm4gdGhpc1t5bl19Y3JlYXRlQXR0cmlidXRlKGUpe3JldHVybiBuZXcga24odGhpcyxlKX1jcmVhdGVDREFUQVNlY3Rpb24oZSl7cmV0dXJuIG5ldyB6aSh0aGlzLGUpfWNyZWF0ZUNvbW1lbnQoZSl7cmV0dXJuIG5ldyBKaSh0aGlzLGUpfWNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKXtyZXR1cm4gbmV3IEFhKHRoaXMpfWNyZWF0ZURvY3VtZW50VHlwZShlLHQsbil7cmV0dXJuIG5ldyBPcyh0aGlzLGUsdCxuKX1jcmVhdGVFbGVtZW50KGUpe3JldHVybiBuZXcgTW4odGhpcyxlKX1jcmVhdGVSYW5nZSgpe2NvbnN0IGU9bmV3IHliO3JldHVybiBlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyPXRoaXMsZX1jcmVhdGVUZXh0Tm9kZShlKXtyZXR1cm4gbmV3IFJuKHRoaXMsZSl9Y3JlYXRlVHJlZVdhbGtlcihlLHQ9LTEpe3JldHVybiBuZXcgd2IoZSx0KX1jcmVhdGVOb2RlSXRlcmF0b3IoZSx0PS0xKXtyZXR1cm4gdGhpcy5jcmVhdGVUcmVlV2Fsa2VyKGUsdCl9Y3JlYXRlRXZlbnQoZSl7Y29uc3QgdD1JZyhlPT09IkV2ZW50Ij9uZXcgRHIoIiIpOm5ldyBFaCgiIikpO3JldHVybiB0LmluaXRFdmVudD10LmluaXRDdXN0b21FdmVudD0obixzPSExLGk9ITEsYSk9Pnt0LmJ1YmJsZXM9ISFzLE5nKHQse3R5cGU6e3ZhbHVlOm59LGNhbkJ1YmJsZTp7dmFsdWU6c30sY2FuY2VsYWJsZTp7dmFsdWU6aX0sZGV0YWlsOnt2YWx1ZTphfX0pfSx0fWNsb25lTm9kZShlPSExKXtjb25zdHtjb25zdHJ1Y3Rvcjp0LFt5dF06bixbcHJdOnN9PXRoaXMsaT1uZXcgdDtpZihpW3l0XT1uLGUpe2NvbnN0IGE9aVtpZV0se2NoaWxkTm9kZXM6b309dGhpcztmb3IobGV0e2xlbmd0aDp1fT1vLGw9MDtsPHU7bCsrKWkuaW5zZXJ0QmVmb3JlKG9bbF0uY2xvbmVOb2RlKCEwKSxhKTtzJiYoaVtwcl09b1swXSl9cmV0dXJuIGl9aW1wb3J0Tm9kZShlKXtjb25zdCB0PTE8YXJndW1lbnRzLmxlbmd0aCYmISFhcmd1bWVudHNbMV0sbj1lLmNsb25lTm9kZSh0KSx7W3l0XTpzfT10aGlzLHthY3RpdmU6aX09cyxhPW89Pntjb25zdHtvd25lckRvY3VtZW50OnUsbm9kZVR5cGU6bH09bztvLm93bmVyRG9jdW1lbnQ9dGhpcyxpJiZ1IT09dGhpcyYmbD09PXllJiZzLnVwZ3JhZGUobyl9O2lmKGEobiksdClzd2l0Y2gobi5ub2RlVHlwZSl7Y2FzZSB5ZTpjYXNlIFl0OntsZXR7WyRdOm8sW2llXTp1fT1uO2Zvcig7byE9PXU7KW8ubm9kZVR5cGU9PT15ZSYmYShvKSxvPW9bJF07YnJlYWt9fXJldHVybiBufXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuY2hpbGROb2Rlcy5qb2luKCIiKX1xdWVyeVNlbGVjdG9yKGUpe3JldHVybiB2aChzdXBlci5xdWVyeVNlbGVjdG9yLHRoaXMsZSl9cXVlcnlTZWxlY3RvckFsbChlKXtyZXR1cm4gdmgoc3VwZXIucXVlcnlTZWxlY3RvckFsbCx0aGlzLGUpfWdldEVsZW1lbnRzQnlUYWdOYW1lTlMoZSx0KXtyZXR1cm4gdGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZSh0KX1jcmVhdGVBdHRyaWJ1dGVOUyhlLHQpe3JldHVybiB0aGlzLmNyZWF0ZUF0dHJpYnV0ZSh0KX1jcmVhdGVFbGVtZW50TlMoZSx0LG4pe3JldHVybiBlPT09eXM/bmV3IE9uKHRoaXMsdCxudWxsKTp0aGlzLmNyZWF0ZUVsZW1lbnQodCxuKX19O3J0KHdoLkRvY3VtZW50PWZ1bmN0aW9uKCl7ZHQoKX0sSXIpLnByb3RvdHlwZT1Jci5wcm90b3R5cGU7Y29uc3QgRGI9KHIsZSx0LG4pPT57aWYoIWUmJklzLmhhcyh0KSl7Y29uc3QgYT1Jcy5nZXQodCk7cmV0dXJuIG5ldyBhKHIsdCl9Y29uc3R7W3l0XTp7YWN0aXZlOnMscmVnaXN0cnk6aX19PXI7aWYocyl7Y29uc3QgYT1lP24uaXM6dDtpZihpLmhhcyhhKSl7Y29uc3R7Q2xhc3M6b309aS5nZXQoYSksdT1uZXcgbyhyLHQpO3JldHVybiBDci5zZXQodSx7Y29ubmVjdGVkOiExfSksdX19cmV0dXJuIG5ldyBlZShyLHQpfTtjbGFzcyBJYiBleHRlbmRzIElye2NvbnN0cnVjdG9yKCl7c3VwZXIoInRleHQvaHRtbCIpfWdldCBhbGwoKXtjb25zdCBlPW5ldyBGdDtsZXR7WyRdOnQsW2llXTpufT10aGlzO2Zvcig7dCE9PW47KXtzd2l0Y2godC5ub2RlVHlwZSl7Y2FzZSB5ZTplLnB1c2godCk7YnJlYWt9dD10WyRdfXJldHVybiBlfWdldCBoZWFkKCl7Y29uc3R7ZG9jdW1lbnRFbGVtZW50OmV9PXRoaXM7bGV0e2ZpcnN0RWxlbWVudENoaWxkOnR9PWU7cmV0dXJuKCF0fHx0LnRhZ05hbWUhPT0iSEVBRCIpJiYodD10aGlzLmNyZWF0ZUVsZW1lbnQoImhlYWQiKSxlLnByZXBlbmQodCkpLHR9Z2V0IGJvZHkoKXtjb25zdHtoZWFkOmV9PXRoaXM7bGV0e25leHRFbGVtZW50U2libGluZzp0fT1lO3JldHVybighdHx8dC50YWdOYW1lIT09IkJPRFkiKSYmKHQ9dGhpcy5jcmVhdGVFbGVtZW50KCJib2R5IiksZS5hZnRlcih0KSksdH1nZXQgdGl0bGUoKXtjb25zdHtoZWFkOmV9PXRoaXM7cmV0dXJuIGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRpdGxlIikuYXQoMCk/LnRleHRDb250ZW50fHwiIn1zZXQgdGl0bGUoZSl7Y29uc3R7aGVhZDp0fT10aGlzO2xldCBuPXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRpdGxlIikuYXQoMCk7bj9uLnRleHRDb250ZW50PWU6dC5pbnNlcnRCZWZvcmUodGhpcy5jcmVhdGVFbGVtZW50KCJ0aXRsZSIpLHQuZmlyc3RDaGlsZCkudGV4dENvbnRlbnQ9ZX1jcmVhdGVFbGVtZW50KGUsdCl7Y29uc3Qgbj0hISh0JiZ0LmlzKSxzPURiKHRoaXMsbixlLHQpO3JldHVybiBuJiZzLnNldEF0dHJpYnV0ZSgiaXMiLHQuaXMpLHN9fWNsYXNzIE5iIGV4dGVuZHMgSXJ7Y29uc3RydWN0b3IoKXtzdXBlcigiaW1hZ2Uvc3ZnK3htbCIpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXNbVnJdLmRvY1R5cGUrc3VwZXIudG9TdHJpbmcoKX19Y2xhc3Mga2IgZXh0ZW5kcyBJcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCJ0ZXh0L3htbCIpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXNbVnJdLmRvY1R5cGUrc3VwZXIudG9TdHJpbmcoKX19bGV0IHhiPWNsYXNzIEZoe3BhcnNlRnJvbVN0cmluZyhlLHQsbj1udWxsKXtsZXQgcz0hMSxpO3JldHVybiB0PT09InRleHQvaHRtbCI/KHM9ITAsaT1uZXcgSWIpOnQ9PT0iaW1hZ2Uvc3ZnK3htbCI/aT1uZXcgTmI6aT1uZXcga2IsaVt3aV09RmgsbiYmKGlbZHNdPW4pLHMmJmU9PT0iLi4uIiYmKGU9IjwhZG9jdHlwZSBodG1sPjxodG1sPjxoZWFkPjwvaGVhZD48Ym9keT48L2JvZHk+PC9odG1sPiIpLGU/Z2woaSxzLGUpOml9fTtjb25zdCBUYj0ocixlPW51bGwpPT5uZXcgeGIoKS5wYXJzZUZyb21TdHJpbmcociwidGV4dC9odG1sIixlKS5kZWZhdWx0VmlldztmdW5jdGlvbiBCYigpe2R0KCl9cnQoQmIsSXIpLnByb3RvdHlwZT1Jci5wcm90b3R5cGU7Y29uc3QgS2E9c2VsZixfYj1mdW5jdGlvbigpe2NvbnN0IHI9dGhpcy5jaGlsZE5vZGVzO2lmKCFyKXJldHVybiBudWxsO2ZvcihsZXQgZT0wO2U8ci5sZW5ndGg7ZSs9MSl7Y29uc3QgdD10eXBlb2Ygci5pdGVtPT0iZnVuY3Rpb24iP3IuaXRlbShlKTpyW2VdO2lmKHQ/Lm5vZGVUeXBlPT09MSlyZXR1cm4gdH1yZXR1cm4gbnVsbH0sRGg9cj0+e2lmKCFyfHx0eXBlb2YgciE9Im9iamVjdCIpcmV0dXJuO2NvbnN0IGU9T2JqZWN0LmdldFByb3RvdHlwZU9mKHIpOyFlfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwiZmlyc3RFbGVtZW50Q2hpbGQiKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImZpcnN0RWxlbWVudENoaWxkIix7Y29uZmlndXJhYmxlOiEwLGdldDpfYn0pfTtjbGFzcyBSYiBleHRlbmRzIHJwe3BhcnNlRnJvbVN0cmluZyhlLHQpe2NvbnN0IG49c3VwZXIucGFyc2VGcm9tU3RyaW5nKGUsdCk7cmV0dXJuIERoKG4pLERoKG4uZG9jdW1lbnRFbGVtZW50KSxufX1jb25zdCBGYj0ocixlKT0+ZSBpbnN0YW5jZW9mIEVycm9yP3tpZDpyLG9rOiExLG1lc3NhZ2U6ZS5tZXNzYWdlLHN0YWNrOmUuc3RhY2t9OntpZDpyLG9rOiExLG1lc3NhZ2U6U3RyaW5nKGUpfSxNYj0oKT0+e2NvbnN0e3dpbmRvdzpyfT1UYigiPCFkb2N0eXBlIGh0bWw+PGh0bWw+PGhlYWQ+PC9oZWFkPjxib2R5PjwvYm9keT48L2h0bWw+IiksZT1nbG9iYWxUaGlzO3JldHVybiBlLndpbmRvdz1yLGUuZG9jdW1lbnQ9ci5kb2N1bWVudCxlLkRPTVBhcnNlcj1SYixlLk5vZGU9ci5Ob2RlLGUuRWxlbWVudD1yLkVsZW1lbnQsZS5IVE1MRWxlbWVudD1yLkhUTUxFbGVtZW50LGUuRG9jdW1lbnRGcmFnbWVudD1yLkRvY3VtZW50RnJhZ21lbnQsZS5YTUxTZXJpYWxpemVyPWVwLHIuZG9jdW1lbnR9LE9iPWFzeW5jIHI9Pntjb25zdCBlPU1iKCksdD1lLmNyZWF0ZUVsZW1lbnQoImRpdiIpLG49ZS5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gZS5ib2R5LmFwcGVuZENoaWxkKHQpLGUuYm9keS5hcHBlbmRDaGlsZChuKSxhd2FpdCBpZChyLmJ1ZmZlcixuLHQsey4uLnIub3B0aW9ucyxleHBlcmltZW50YWw6ITEsdXNlQmFzZTY0VVJMOiEwfSksYCR7dC5pbm5lckhUTUx9JHtuLmlubmVySFRNTH1gfTtLYS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixhc3luYyByPT57Y29uc3QgZT1yLmRhdGE7dHJ5e2NvbnN0IHQ9YXdhaXQgT2IoZSk7S2EucG9zdE1lc3NhZ2Uoe2lkOmUuaWQsb2s6ITAsaHRtbDp0fSl9Y2F0Y2godCl7S2EucG9zdE1lc3NhZ2UoRmIoZS5pZCx0KSl9fSl9KSgpOwo=',Tl=typeof window<'u'&&window['Blob']&&new Blob([Uint8Array['from'](atob(Dl),m=>m['charCodeAt'](0x0))],{'type':'text/javascript;charset=utf-8'});function RZ(){let m;try{if(m=Tl&&(window['URL']||window['webkitURL'])['createObjectURL'](Tl),!m)throw'';return new Worker(m);}catch{return new Worker('data:application/javascript;base64,'+Dl);}finally{m&&(window['URL']||window['webkitURL'])['revokeObjectURL'](m);}}const Ql={'width':0x31a,'height':0x463},yl=0x2,uZ=0x3a98,Gl=0.24,al=0x3,el=0.15;let hZ=0x0;const IZ=((()=>{const m={'module':null,async 'load'(){const b3=b;return this['module']||(this[b3(0x129)]=import('./docx-preview.js')),this['module'];}};return async()=>await m['load']();})()),sZ=(m=!0x0)=>({'debug':!0x1,'experimental':m}),pZ=m=>m?.['options']?.['docx']?.['worker']!==!0x1&&typeof Worker<'u',yZ=m=>m?.['options']?.['docx']?.['progressive']!==!0x1&&typeof document<'u',aZ=()=>new Promise(m=>{if(typeof window>'u'||typeof window['requestAnimationFrame']!='function'){setTimeout(m,0x0);return;}window['requestAnimationFrame'](()=>m());});async function nZ(n,o,p){const b4=b;if(!yZ(p)){o['innerHTML']=n,p?.['onProgressiveRender']?.();return;}const r=document['createElement']('template');r['innerHTML']=n;const s=r['content']['querySelector']('.docx-wrapper');if(!s){o['innerHTML']=n,p?.['onProgressiveRender']?.();return;}const x=Array['from'](s['children']),y=s['cloneNode'](!0x1);let B=!0x1;o['innerHTML']='',Array['from'](r['content']['childNodes'])['forEach'](D=>{if(D===s){o['appendChild'](y);return;}o['appendChild'](D);});for(let D=0x0;D<x['length'];D+=yl)x['slice'](D,D+yl)['forEach'](F=>{y['appendChild'](F);}),B||(B=!0x0,p?.['onProgressiveRender']?.()),D+yl<x[b4(0x184)]&&await aZ();}async function YZ(n,o,p,r){const b5=b;if(!pZ(r))return!0x1;const s=new RZ(),x=++hZ,y=r?.[b5(0x152)]?.['docx']?.['workerTimeout']??uZ;return await new Promise(B=>{const ba=b5;let D=!0x1,F;const H=()=>{const b6=b;F!==void 0x0&&window['clearTimeout'](F),s[b6(0x18f)]('message',P),s['removeEventListener'](b6(0x12a),Q),s['removeEventListener']('messageerror',S),s['terminate']();},K=U=>{D||(D=!0x0,H(),console['warn']('[file-viewer]\x20DOCX\x20Worker\x20渲染失败,回退到\x20docx-preview\x20主线程渲染。',U),B(!0x1));},P=U=>{const b7=b;if(U['data']?.['id']===x&&!D){if(D=!0x0,H(),U[b7(0x178)]['ok']){nZ(U['data']['html'],o,r)['then'](()=>B(!0x0))['catch'](a0=>{const b8=b7;console[b8(0xeb)]('[file-viewer]\x20DOCX\x20渐进挂载失败,回退到\x20docx-preview\x20主线程渲染。',a0),B(!0x1);});return;}console['warn']('[file-viewer]\x20DOCX\x20Worker\x20渲染失败,回退到\x20docx-preview\x20主线程渲染。',U['data']['message']),B(!0x1);}},Q=U=>{const b9=b;K(U[b9(0x12a)]||U[b9(0x1ab)]);},S=()=>{K('DOCX\x20Worker\x20消息无法结构化传输');};s['addEventListener']('message',P),s['addEventListener'](ba(0x12a),Q),s['addEventListener']('messageerror',S),Number['isFinite'](y)&&y>0x0&&(F=window[ba(0x1f1)](()=>{K('DOCX\x20Worker\x20超过\x20'+y+'ms\x20未返回结果');},y));const T=n['slice'](0x0);s[ba(0x216)]({'id':x,'buffer':T,'options':{...p,'experimental':!0x1,'useBase64URL':!0x0}},[T]);});}const LZ='\x0a.docx-fit-viewer\x20{\x0a\x20\x20box-sizing:\x20border-box;\x0a\x20\x20height:\x20100%;\x0a\x20\x20overflow:\x20auto;\x0a\x20\x20background:\x20#ececec;\x0a}\x0a.docx-fit-viewer\x20.docx-wrapper\x20{\x0a\x20\x20box-sizing:\x20border-box;\x0a\x20\x20min-width:\x200\x20!important;\x0a\x20\x20width:\x20100%\x20!important;\x0a\x20\x20padding:\x2024px\x2014px\x2040px\x20!important;\x0a\x20\x20background:\x20#e7e9ec\x20!important;\x0a}\x0a.docx-fit-viewer\x20.docx-page-frame\x20{\x0a\x20\x20position:\x20relative;\x0a\x20\x20width:\x20100%;\x0a\x20\x20min-width:\x200;\x0a\x20\x20margin:\x200\x20auto\x2024px;\x0a\x20\x20overflow:\x20visible;\x0a}\x0a.docx-fit-viewer\x20.docx-page-frame\x20>\x20section.docx\x20{\x0a\x20\x20position:\x20absolute;\x0a\x20\x20top:\x200;\x0a\x20\x20left:\x2050%;\x0a\x20\x20margin:\x200\x20!important;\x0a\x20\x20background:\x20#ffffff\x20!important;\x0a\x20\x20box-shadow:\x200\x202px\x2014px\x20rgba(25,\x2035,\x2048,\x200.18);\x0a\x20\x20box-sizing:\x20border-box;\x0a\x20\x20color:\x20#111827;\x0a\x20\x20overflow:\x20hidden;\x0a\x20\x20transform-origin:\x20top\x20center;\x0a}\x0a';function JZ(m){const n=document['createElement']('style');return n['textContent']=LZ,m['prepend'](n),n;}function kl(m,n,o){const bb=b,p=m['cloneNode'](!0x1);p[bb(0x13e)]='',p['dataset'][bb(0x179)]='true',p[bb(0xe4)]['minHeight']=o+'px',p['style']['height']=o+'px',p['style'][bb(0x1e0)]='hidden';const r=n[bb(0x1c1)](!0x1);return p['appendChild'](r),Array['from'](m['children'])['forEach'](s=>{const be=bb;s!==n&&p[be(0x1b9)](s['cloneNode'](!0x0));}),{'page':p,'article':r};}function oZ(m){const n=window['getComputedStyle'](m),o=parseFloat(n['minHeight']);return Number['isFinite'](o)&&o>0x0?o:m['offsetHeight'];}function UZ(m){const n=m['querySelector']('.docx-wrapper');n&&Array['from'](n['children'])['forEach'](o=>{if(!(o instanceof HTMLElement)||!o['matches']('section.docx'))return;const p=o['querySelector'](':scope\x20>\x20article');if(!(p instanceof HTMLElement))return;const r=oZ(o),s=Array['from'](p['childNodes']);if(!r||s['length']<0x2||o['scrollHeight']<=r*1.15)return;let x=kl(o,p,r);o['before'](x['page']),s['forEach'](y=>{const bf=b;x['article'][bf(0x1b9)](y),!(x['page']['scrollHeight']<=r+0x1||x['article']['childNodes']['length']===0x1)&&(x['article']['removeChild'](y),x=kl(o,p,r),o['before'](x['page']),x['article']['appendChild'](y));}),o['remove']();});}function FZ(m){const bg=b,n=m[bg(0x14b)]('.docx-wrapper');return n?Array['from'](n[bg(0x109)])['flatMap'](o=>{const bh=bg;if(!(o instanceof HTMLElement)||!o[bh(0x116)]('section.docx'))return[];const p=document['createElement']('div');return p['className']='docx-page-frame',o['before'](p),p['appendChild'](o),[p];}):[];}function tZ(n){const bj=b;n['classList']['add']('docx-fit-viewer');const o=JZ(n);UZ(n);const p=FZ(n);let r=0x0,s=0x1,x=0x1,y=0x1;const B=l(),D=Q=>Math['min'](al,Math['max'](Gl,Number(Q['toFixed'](0x2)))),F=()=>{window['cancelAnimationFrame'](r),r=window['requestAnimationFrame'](()=>{let Q=0x1;p['forEach'](T=>{const bi=b,a0=T['firstElementChild'];if(!(a0 instanceof HTMLElement))return;a0['style']['transform']='translateX(-50%)';const a1=a0['offsetWidth'],a2=a0['offsetHeight'];if(!a1||!a2)return;const a3=Math['max'](n['clientWidth']-0x1c,0x78),a4=Math[bi(0x167)](0x1,Math['max'](Gl,a3/a1)),a5=D(a4*s);Q=a5,y=a4,a0['style']['transform']=bi(0x168)+a5+')',T[bi(0xe4)]['width']=Math['ceil'](Math['max'](a1*a5,n['clientWidth']-0x1c,0x78))+'px',T['style']['maxWidth']='none',T['style'][bi(0x19c)]=Math['ceil'](a2*a5)+'px';}),x=Q,B['emit']();});},H=()=>({'scale':x,'label':Math['round'](x*0x64)+'%','canZoomIn':x<al,'canZoomOut':x>Gl,'canReset':s!==0x1,'minScale':Gl,'maxScale':al}),K=Q=>(s=Math['min'](0x6,Math['max'](0.2,Number(Q['toFixed'](0x2)))),F(),H());n['dataset'][bj(0x1fc)]='docx',i(n,{'zoomIn':()=>K(s+el),'zoomOut':()=>K(s-el),'resetZoom':()=>K(0x1),'setZoom':Q=>K(Q/Math[bj(0x12d)](y,0.01)),'getState':H,'subscribe':B['subscribe']});const P=new ResizeObserver(F);return P['observe'](n),p['forEach'](Q=>{const S=Hl(Q);S&&P['observe'](S);}),F(),()=>{const bk=bj;window['cancelAnimationFrame'](r),P[bk(0x1f3)](),k(n),o['remove'](),n['classList']['remove']('docx-fit-viewer');};}function Hl(m){const bm=b,n=m[bm(0x1d6)];return n instanceof HTMLElement?n:null;}function Al(m){const n=m?Hl(m):null;return n?d(n,Ql):Ql;}function SZ(m,n){const bn=b,o=e(n['width']),p=e(n['height']);h(m,n),m['style']['margin']='0\x20auto\x2018px';const r=Hl(m);r&&(r['style']['position']='relative',r['style']['top']='auto',r['style']['left']='auto',r['style']['width']=o,r['style']['maxWidth']='none',r['style']['minHeight']=p,r[bn(0xe4)]['height']=p,r['style']['margin']='0\x20auto',r[bn(0xe4)]['transform']=bn(0x20a),r['style']['transformOrigin']=bn(0xef),r['style']['overflow']='hidden',r['style'][bn(0x212)]='none');}function xZ(m){const n=m['querySelector']('.docx-page-frame'),o=Al(n||void 0x0);return c({'selector':'.viewer-export-content\x20.docx-page-frame','width':o['width'],'height':o['height']});}function NZ(m){const bo=b,n=Array[bo(0x14c)](m['querySelectorAll']('.docx-page-frame')),o=m['cloneNode'](!0x0),p=document['createElement']('div');p['className']='docx-print-document';const r=Array['from'](o['querySelectorAll']('style'))[bo(0x1d9)](s=>!s['textContent']?.['includes']('.docx-fit-viewer'))[bo(0x1af)](s=>s['outerHTML'])['join']('');return o['querySelectorAll']('.docx-page-frame')['forEach']((s,x)=>{SZ(s,Al(n[x])),p['appendChild'](s['cloneNode'](!0x0));}),p[bo(0x177)]?''+r+p['outerHTML']:o['innerHTML'];}async function Sc(n,o,p){const bp=b,r=sZ(),s=await YZ(n,o,r,p);if(o['dataset']['docxWorker']=s?'true':'false',!s){const {defaultOptions:y,renderAsync:B}=await IZ();await B(n,o,void 0x0,{...y,...r});}const x=tZ(o);return p?.[bp(0x172)]?.({'includeDocumentStyles':!0x1,'beforeSnapshot':()=>{window['dispatchEvent'](new Event('resize'));},'printStyle':()=>xZ(o),'toHtml':()=>NZ(o)}),{'$el':o,'unmount'(){const bq=bp;p?.['registerExportAdapter']?.(null),x(),delete o[bq(0x100)]['docxWorker'],o['innerHTML']='';}};}const zl=globalThis['Buffer'];let Bl=0x0;function j(m){const br=b;return String(m)[br(0xe5)](/&/g,'&')['replace'](/</g,'<')[br(0xe5)](/>/g,'>')['replace'](/"/g,'"')['replace'](/'/g,br(0x15b));}function M(m='id'){return Bl+=0x1,m+'-'+Bl;}function dl(m){return m%0x2===0x0?m:m+0x1;}function KZ(m){const bs=b,n=m instanceof Uint8Array?m:m instanceof ArrayBuffer?new Uint8Array(m):new Uint8Array(m['buffer'],m[bs(0x12f)],m['byteLength']);if(zl)return zl['from'](n)['toString'](bs(0x1a2));let o='';const p=0x8000;for(let r=0x0;r<n[bs(0x184)];r+=p)o+=String['fromCharCode'](...n['subarray'](r,Math['min'](r+p,n[bs(0x184)])));return btoa(o);}function ul(m,n='application/octet-stream'){return'data:'+n+';base64,'+KZ(m);}function ql(m){const bt=b;return String(m??'')[bt(0x131)]()['replace'](/[^a-z0-9\u4e00-\u9fa5]+/g,'-')['replace'](/^-+|-+$/g,'')||bt(0x1c9);}function $l(m,n){const bu=b;if(m===n)return!0x0;if(!m||!n)return!0x1;const o=Object[bu(0x1d8)](m),p=Object['keys'](n);if(o['length']!==p['length'])return!0x1;for(const r of o)if(m[r]!==n[r])return!0x1;return!0x0;}function Xl(m,n,o){const bv=b,p=o?{'message':n,...o}:{'message':n};return m[bv(0x1b2)](p),p;}function v(m,n=0x60){if(!(m==null||Number['isNaN'](m)))return m/0x5a0*n;}function HZ(m){return String(m??'')['replace'](/\u000b/g,'\x0a')['replace'](/\u000c/g,'\x0a');}function Fl(m='utf-8'){return new TextDecoder(m,{'fatal':!0x1});}const Cl=Fl('utf-16le'),TZ=Fl(typeof TextDecoder<'u'?bw(0x1de):'latin1');class J{['bytes'];[bw(0x21a)];[bw(0x184)];constructor(m){const bx=bw;if(m instanceof Uint8Array)this['bytes']=m;else{if(m instanceof ArrayBuffer)this['bytes']=new Uint8Array(m);else{if(ArrayBuffer[bx(0x16e)](m))this['bytes']=new Uint8Array(m['buffer'],m[bx(0x12f)],m['byteLength']);else throw new TypeError('BinaryReader\x20expects\x20ArrayBuffer\x20or\x20Uint8Array');}}this['view']=new DataView(this['bytes']['buffer'],this['bytes']['byteOffset'],this[bx(0x1e5)]['byteLength']),this['length']=this['bytes']['byteLength'];}['ensure'](m,n=0x1){return m>=0x0&&m+n<=this['length'];}['u8'](m){const by=bw;return this['ensure'](m,0x1)?this[by(0x21a)]['getUint8'](m):0x0;}['i8'](m){const bz=bw;return this['ensure'](m,0x1)?this[bz(0x21a)][bz(0x169)](m):0x0;}['u16'](m){const bA=bw;return this[bA(0x144)](m,0x2)?this[bA(0x21a)]['getUint16'](m,!0x0):0x0;}['i16'](m){return this['ensure'](m,0x2)?this['view']['getInt16'](m,!0x0):0x0;}['u32'](m){return this['ensure'](m,0x4)?this['view']['getUint32'](m,!0x0):0x0;}['i32'](m){return this['ensure'](m,0x4)?this['view']['getInt32'](m,!0x0):0x0;}['u64'](m){const n=this['u32'](m);return this['u32'](m+0x4)*0x100000000+n;}['slice'](m,n){return this['ensure'](m,n)?this['bytes']['subarray'](m,m+n):new Uint8Array(0x0);}[bw(0x1da)](n,o,p){const r=[],s=p['byteWidth']??0x1;for(let x=0x0;x<o;x+=0x1)r['push'](p['call'](this,n+x*s));return r;}['utf16le'](m,n){return this['ensure'](m,n)?Cl['decode'](this['slice'](m,n)):'';}['latin1'](m,n){const bB=bw;return this['ensure'](m,n)?TZ[bB(0x16b)](this['slice'](m,n)):'';}['ascii'](n,o){if(!this['ensure'](n,o))return'';let p='';const r=this['slice'](n,o);for(let s=0x0;s<r['length'];s+=0x1)p+=String['fromCharCode'](r[s]??0x0);return p;}['utf16z'](n,o){const bC=bw,p=this['slice'](n,o);let r=p[bC(0x184)];for(let s=0x0;s+0x1<p['length'];s+=0x2)if(p[s]===0x0&&p[s+0x1]===0x0){r=s;break;}return Cl[bC(0x16b)](p['subarray'](0x0,r));}}J[bw(0x1ea)]['u8']['byteWidth']=0x1,J['prototype']['i8']['byteWidth']=0x1,J['prototype'][bw(0x1b1)]['byteWidth']=0x2,J['prototype'][bw(0x182)]['byteWidth']=0x2,J['prototype']['u32']['byteWidth']=0x4,J['prototype']['i32']['byteWidth']=0x4;function QZ(m){const bD=bw;if(m instanceof Uint8Array)return m;if(m instanceof ArrayBuffer)return new Uint8Array(m);if(ArrayBuffer['isView'](m))return new Uint8Array(m['buffer'],m['byteOffset'],m[bD(0x20f)]);throw new TypeError(bD(0x1b6));}const Ml=[0xd0,0xcf,0x11,0xe0,0xa1,0xb1,0x1a,0xe1],sl=0xffffffff,$=0xfffffffe,eZ=0xfffffffd,kZ=0xfffffffc,zZ=0x1<<0x14,BZ=0x1000;function El(m){return m===sl||m===$||m===eZ||m===kZ;}function tl(n,o,p){const bE=bw,r=0x200+p*o,s=r+o;if(r<0x0||r>=n['length'])throw new Error('Sector\x20'+p+'\x20is\x20out\x20of\x20bounds');if(s<=n['length'])return n[bE(0xea)](r,s);const x=new Uint8Array(o);return x['set'](n['subarray'](r)),x;}function _l(n,o,p=zZ){const r=[],s=new Set();let x=n,y=0x0;for(;x!==$&&x!==sl&&x>=0x0;){if(s['has'](x))throw new Error('Detected\x20sector\x20loop\x20at\x20'+x);if(s['add'](x),r['push'](x),x=o(x),y+=0x1,y>p)throw new Error('Sector\x20chain\x20exceeds\x20safe\x20limit');}return r;}function Wl(n,o,p,r,s=null){const bF=bw;if(p===$||p===sl||p<0x0)return new Uint8Array(0x0);const x=_l(p,D=>r[D]??$),y=new Uint8Array(x['length']*o);let B=0x0;for(const D of x)y['set'](tl(n,o,D),B),B+=o;return s==null?y:y[bF(0xea)](0x0,Math['min'](s,y['length']));}function CZ(m){function n(r,s){const bG=b;if(r<0x0||r>=m['length'])return;const x=m[r];x&&(n(x['leftSiblingId'],s),s['push'](r),n(x[bG(0x18b)],s));}function o(r){const s=m[r];if(!s||s['childId']<0x0)return;const x=[];n(s['childId'],x),s['children']=x;for(const y of x){const B=m[y];B&&(B['parentId']=r,o(y));}}const p=m['find'](r=>r['objectType']===0x5);if(!p)throw new Error('CFB\x20root\x20storage\x20not\x20found');return o(p['id']),p;}function MZ(n){const bH=bw,o=new Map();for(const p of n){if(!p||!p['name'])continue;const r=[];let s=p;for(;s;)s['objectType']!==0x5&&r['push'](s['name']),s=s['parentId']!=null?n[s[bH(0x197)]]??null:null;const x='/'+r['reverse']()[bH(0x192)]('/');p['path']=x==='/'?'/'+p['name']:x,o[bH(0x126)](p['path'],p);}return o;}function EZ(m){return m['replace'](/\u0000+$/,'');}function jZ(a0,a1={}){const bI=bw,a2=QZ(a0),a3=new J(a2),a4=[];for(let aB=0x0;aB<Ml[bI(0x184)];aB+=0x1)if(a3['u8'](aB)!==Ml[aB])throw new Error('Not\x20a\x20Compound\x20File\x20Binary\x20document');const a5=a3[bI(0x1b1)](0x1a),a6=a3[bI(0x1b1)](0x1e),a7=a3['u16'](0x20),a8=0x1<<a6,a9=0x1<<a7,aa=a3['u32'](0x28),ab=a3['u32'](0x2c),ae=a3[bI(0x1d2)](0x30),af=a3['u32'](0x34),ag=a3['u32'](0x38),ah=a3[bI(0x1d2)](0x3c),ai=a3['u32'](0x40),aj=a3['i32'](0x44),ak=a3['u32'](0x48);ag!==BZ&&Xl(a4,'Unexpected\x20mini\x20stream\x20cutoff\x20size\x20'+ag);const am=[];for(let aC=0x0;aC<0x6d;aC+=0x1){const aD=a3['i32'](0x4c+aC*0x4);!El(aD)&&aD>=0x0&&am['push'](aD);}const an=[...am];let ao=aj,ap=0x0;for(;ao!==$&&ao!==sl&&ao>=0x0;){const aE=tl(a2,a8,ao),aF=new J(aE),aG=a8/0x4-0x1;for(let aH=0x0;aH<aG;aH+=0x1){const aI=aF['i32'](aH*0x4);!El(aI)&&aI>=0x0&&an['push'](aI);}if(ao=aF['i32'](a8-0x4),ap+=0x1,ap>ak+0x4){Xl(a4,'DIFAT\x20chain\x20exceeded\x20declared\x20sector\x20count;\x20stopping\x20early');break;}}ab&&an['length']<ab&&Xl(a4,'FAT\x20sector\x20count\x20mismatch:\x20header\x20says\x20'+ab+',\x20found\x20'+an['length']);const aq=[];for(const aJ of an){const aK=tl(a2,a8,aJ),aL=new J(aK);for(let aM=0x0;aM<a8/0x4;aM+=0x1)aq['push'](aL['i32'](aM*0x4));}const ar=Wl(a2,a8,ae,aq),as=new J(ar),at=[];for(let aN=0x0,aO=0x0;aN+0x80<=ar[bI(0x184)];aN+=0x80,aO+=0x1){const aP=as[bI(0x1b1)](aN+0x40),aQ=EZ(as[bI(0x1fa)](aN,Math['max'](0x0,aP-0x2)));!aQ&&as['u8'](aN+0x42)===0x0||at[bI(0x1b2)]({'id':aO,'name':aQ,'objectType':as['u8'](aN+0x42),'colorFlag':as['u8'](aN+0x43),'leftSiblingId':as[bI(0x1d2)](aN+0x44),'rightSiblingId':as[bI(0x1d2)](aN+0x48),'childId':as['i32'](aN+0x4c),'clsid':as['slice'](aN+0x50,0x10),'stateBits':as['u32'](aN+0x60),'creationTime':as[bI(0x1f4)](aN+0x64),'modifiedTime':as['u64'](aN+0x6c),'startSector':as['i32'](aN+0x74),'streamSize':a5===0x3?as[bI(0x185)](aN+0x78):as['u64'](aN+0x78),'children':[],'parentId':null});}const au=CZ(at),av=MZ(at),aw=[];if(ai&&ah>=0x0){const aR=Wl(a2,a8,ah,aq),aS=new J(aR);for(let aT=0x0;aT+0x4<=aR['length'];aT+=0x4)aw['push'](aS['i32'](aT));}const ax=Wl(a2,a8,au['startSector'],aq,au['streamSize']);function ay(aU){const bJ=bI;if(aU['startSector']<0x0)return new Uint8Array(0x0);const aV=_l(aU['startSector'],aY=>aw[aY]??$),aW=new Uint8Array(aV['length']*a9);let aX=0x0;for(const aY of aV){const b0=aY*a9,b1=b0+a9;if(b1>ax['length'])throw new Error('Mini\x20sector\x20'+aY+'\x20is\x20out\x20of\x20bounds');aW['set'](ax['subarray'](b0,b1),aX),aX+=a9;}return aW['subarray'](0x0,Math['min'](aU['streamSize'],aW[bJ(0x184)]));}function az(aU){const aV=typeof aU=='string'?av['get'](aU)??null:aU;return!aV||aV['objectType']!==0x2&&aV['objectType']!==0x5?null:aV['objectType']===0x5?ax:aV['streamSize']<ag&&aV['startSector']>=0x0&&aw['length']?ay(aV):Wl(a2,a8,aV['startSector'],aq,aV['streamSize']);}function aA(aU){const aV=typeof aU=='string'?av['get'](aU)??null:aU;return aV?(aV['children']||[])['map'](aW=>at[aW])['filter'](aW=>!!aW):[];}return{'bytes':a2,'majorVersion':a5,'sectorSize':a8,'miniSectorSize':a9,'numDirSectors':aa,'numFatSectors':ab,'firstDirSector':ae,'transactionSignature':af,'miniStreamCutoffSize':ag,'warnings':a4,'entries':at,'root':au,'pathMap':av,'getEntry'(aU){const bK=bI;return av[bK(0x121)](aU)??null;},'getStream':az,'listChildren':aA,'findByName'(aU,aV='/'){const bL=bI,aW=aV==='/'?au:av[bL(0x121)](aV)??null;if(!aW)return null;const aX=[aW];for(;aX['length'];){const aY=aX['pop']();if(aY){if(aY['name']===aU)return aY;for(const b0 of aY[bL(0x109)]||[]){const b1=at[b0];b1&&aX['push'](b1);}}}return null;}};}const PZ={'\u0082':'‚','\u0083':'ƒ','\u0084':'„','\u0085':'…','\u0086':'†','\u0087':'‡','\u0088':'ˆ','\u0089':'‰','\u008a':'Š','\u008b':'‹','\u008c':'Œ','\u0091':'‘','\u0092':'’','\u0093':'“','\u0094':'”','\u0095':'•','\u0096':'–','\u0097':'—','\u0098':'˜','\u0099':'™','\u009a':'š','\u009b':'›','\u009c':'œ','\u009f':'Ÿ'};function vZ(m){return m['replace'](/[\x82-\x8C\x91-\x9C\x9F]/g,n=>PZ[n]||n);}function gZ(m){const bM=bw;let n='';for(let o=0x0;o<m[bM(0x184)];o+=0x1)n+=String['fromCharCode'](m[o]??0x0);return vZ(n);}function wZ(m){return new TextDecoder('utf-16le')['decode'](m);}function rZ(n,o){const bN=bw,p=o[bN(0x141)],r=o[bN(0x15d)];if(p==null||r==null||r<=0x0)throw new Error(bN(0xe3));const s=n['subarray'](p,p+r),x=new J(s);let y=0x0;const B=[];for(;y<s['length']&&x['u8'](y)===0x1;){const I=x['u16'](y+0x1);B[bN(0x1b2)]({'type':0x1,'cbGrpprl':I,'bytes':x['slice'](y+0x3,I)}),y+=0x3+I;}if(x['u8'](y)!==0x2)throw new Error('CLX\x20does\x20not\x20contain\x20a\x20Pcdt\x20marker');const D=x[bN(0x185)](y+0x1),F=x['slice'](y+0x5,D),H=OZ(F);return{'prcs':B,'pcdt':{'lcb':D,'pieceTable':H}};}function OZ(o){const bO=bw;if(!o['length'])throw new Error('Empty\x20PlcPcd');const r=new J(o),x=(o['length']-0x4)/0xc;if(!Number['isInteger'](x)||x<0x0)throw new Error('Invalid\x20PlcPcd\x20size');const y=[];for(let F=0x0;F<x+0x1;F+=0x1)y[bO(0x1b2)](r['u32'](F*0x4));const B=[];let D=(x+0x1)*0x4;for(let H=0x0;H<x;H+=0x1){const K=r['u16'](D),P=r[bO(0x185)](D+0x2)>>>0x0,Q=r['u16'](D+0x6),S=!!(P&0x40000000),T=P&0x3fffffff,U=y[H]??0x0,Y=y[H+0x1]??U,a0=S?Math['floor'](T/0x2):T,a1=S?Y-U:(Y-U)*0x2;B['push']({'index':H,'descriptor':K,'fNoParaLast':!!(K&0x1),'fRaw':!!(K&0x2),'prm':Q,'compressed':S,'fcRaw':P,'fc':T,'cpStart':U,'cpEnd':Y,'actualByteStart':a0,'byteLength':a1,'actualByteEnd':a0+a1}),D+=0x8;}return{'cps':y,'pieces':B};}function fZ(m,n){const bP=bw,o=m[bP(0xea)](n['actualByteStart'],n['actualByteEnd']);return n['compressed']?gZ(o):wZ(o);}function DZ(m,n){return n['pcdt']['pieceTable']['pieces']['map'](o=>fZ(m,o));}function hl(n,o,p=null){const bQ=bw,r=n['pcdt'][bQ(0x105)]['pieces'],s=p??!!(o&0x40000000),x=p==null?o&0x3fffffff:o,y=s?Math['floor'](x/0x2):x;for(const B of r){if(y<B['actualByteStart']||y>B['actualByteEnd'])continue;const D=y-B[bQ(0x15a)],F=B['cpStart']+Math['floor'](D/(B['compressed']?0x1:0x2));if(F>=B['cpStart']&&F<=B['cpEnd'])return F;}for(const H of r){if(o<H[bQ(0x15a)]||o>H[bQ(0x1a3)])continue;const I=o-H['actualByteStart'],K=H['cpStart']+Math['floor'](I/(H[bQ(0x143)]?0x1:0x2));if(K>=H[bQ(0x11b)]&&K<=H['cpEnd'])return K;}return null;}function AZ(n,o,p,r,s){const bR=bw;if(s<=r)return'';const x=[];for(let y=0x0;y<o['pcdt'][bR(0x105)]['pieces']['length'];y+=0x1){const B=o['pcdt']['pieceTable']['pieces'][y];if(B['cpEnd']<=r)continue;if(B['cpStart']>=s)break;const D=Math['max'](r,B['cpStart'])-B[bR(0x11b)],F=Math['min'](s,B['cpEnd'])-B['cpStart'];x[bR(0x1b2)]((p[y]??'')[bR(0xfa)](D,F));}return x['join']('');}function qZ(m){const bS=bw,n=[];let o=0x0;for(let p=0x0;p<m['length'];p+=0x1){const r=m[p];(r==='\x0d'||r==='\x07')&&(n['push']({'cpStart':o,'cpEnd':p+0x1,'terminator':r}),o=p+0x1);}return o<m['length']&&n[bS(0x1b2)]({'cpStart':o,'cpEnd':m['length'],'terminator':''}),n;}const z={'paragraph':'\x0d','cellMark':'\x07','picture':'\x01','fieldStart':'\x13','fieldSeparator':'\x14','fieldEnd':'\x15','annotationRef':'\x05','hardLineBreak':'\x0b','pageBreak':'\x0c','nonBreakingHyphen':'\x1e','nonRequiredHyphen':'\x1f'},$Z={0x0:'none',0x1:bw(0xe8),0x2:'word',0x3:'double',0x4:'dotted',0x5:'hidden',0x6:'thick',0x7:'dash',0x9:bw(0x1d1),0xa:bw(0x1a4),0xb:'wave',0x10:'dotted-heavy',0x11:'dashed-heavy',0x12:'dash-long',0x13:bw(0x21b),0x14:'dot-dash-heavy',0x15:'dot-dot-dash-heavy',0x16:'wavy-heavy',0x17:'wavy-double'},_Z={0x0:bw(0x1df),0x1:'center',0x2:'right',0x3:'justify',0x4:'distributed'},ld={0x0:bw(0xf2),0x1:'center',0x2:'bottom'},Sl={0x1:'#000000',0x2:bw(0x17d),0x3:bw(0x1e8),0x4:'#00ff00',0x5:bw(0x187),0x6:bw(0x12e),0x7:'#ffff00',0x8:'#ffffff',0x9:'#000080',0xa:'#008080',0xb:'#008000',0xc:'#800080',0xd:'#800000',0xe:'#808000',0xf:'#808080',0x10:'#c0c0c0'},Zd=['StshfOrig','Stshf','PlcffndRef','PlcffndTxt',bw(0xee),'PlcfandTxt','PlcfSed','PlcPad','PlcfPhe','SttbfGlsy','PlcfGlsy','PlcfHdd','PlcfBteChpx','PlcfBtePapx',bw(0x1db),bw(0x1cd),bw(0x11c),'PlcfFldHdr','PlcfFldFtn','PlcfFldAtn','PlcfFldMcr','SttbfBkmk','PlcfBkf','PlcfBkl','Cmds',bw(0x181),'SttbfMcr','PrDrvr','PrEnvPort',bw(0x125),'Wss','Dop','SttbfAssoc','Clx','PlcfPgdFtn',bw(0x17c),'GrpXstAtnOwners',bw(0x1a6),'Unused2','Unused3',bw(0x10f),'PlcSpaHdr',bw(0x1ed),'PlcfAtnBkl',bw(0x107),'FormFldSttbs','PlcfendRef',bw(0x1be),'PlcfFldEdn','Unused4','DggInfo','SttbfRMark','SttbfCaption',bw(0x12b),bw(0x157),'PlcfSpl',bw(0x106),'PlcfFldTxbx','PlcfHdrtxbxTxt','PlcffldHdrTxbx','StwUser','SttbTtmbd','CookieData','PgdMotherOldOld','BkdMotherOldOld',bw(0x119),'BkdFtnOldOld',bw(0x12c),'BkdEdnOldOld','SttbfIntlFld',bw(0x166),'SttbSavedBy',bw(0x155),'PlfLst','PlfLfo','PlcfTxbxBkd','PlcfTxbxHdrBkd','DocUndoWord9','RgbUse','Usp','Uskf','PlcupcRgbUse',bw(0x132),'SttbGlsyStyle','Plgosl','Plcocx','PlcfBteLvc','dwLowDateTime','dwHighDateTime','PlcfLvcPre10','PlcfAsumy','PlcfGram','SttbListNames','SttbfUssr'];function dd(n){const bT=bw,o=new J(n),r=cd(o);let x=0x20;const y=o[bT(0x1b1)](x);x+=0x2;const B=o['slice'](x,y*0x2);x+=y*0x2;const D=o['u16'](x);x+=0x2;const F=o['slice'](x,D*0x4);x+=D*0x4;const H=o['u16'](x);x+=0x2;const K=o['slice'](x,H*0x8);x+=H*0x8;const P=o['ensure'](x,0x2)?o['u16'](x):0x0;o['ensure'](x,0x2)&&(x+=0x2);const Q=P?o['slice'](x,P*0x2):new Uint8Array(0x0),S=bd(F),T=md(K,H),U=P?new J(Q)['u16'](0x0):0x0;return{'base':r,'csw':y,'cslw':D,'cbRgFcLcb':H,'cswNew':P,'nFibNew':U,'fibRgWBytes':B,'fibRgLwBytes':F,'fibRgFcLcbBytes':K,'fibRgCswNewBytes':Q,'fibRgLw':S,'fibRgFcLcb':T};}function cd(n){const o=n['u16'](0x0),p=n['u16'](0x2),r=n['u16'](0x6),s=n['u16'](0x8),x=n['u16'](0xa),y=n['u16'](0x12);return{'wIdent':o,'nFib':p,'lid':r,'pnNext':s,'flags':x,'envFlags':y,'fDot':!!(x&0x1),'fGlsy':!!(x&0x2),'fComplex':!!(x&0x4),'fHasPic':!!(x&0x8),'cQuickSaves':x>>0x4&0xf,'fEncrypted':!!(x&0x100),'fWhichTblStm':x&0x200?0x1:0x0,'fReadOnlyRecommended':!!(x&0x400),'fWriteReservation':!!(x&0x800),'fExtChar':!!(x&0x1000),'fLoadOverride':!!(x&0x2000),'fFarEast':!!(x&0x4000),'fObfuscated':!!(x&0x8000),'nFibBack':n['u16'](0xc),'lKey':n['u32'](0xe),'envr':n['u8'](0x12),'fMac':!!(y&0x1),'fEmptySpecial':!!(y&0x2),'fLoadOverridePage':!!(y&0x4)};}function bd(m){const bU=bw,n=new J(m),o=[];for(let p=0x0;p+0x4<=m['length'];p+=0x4)o['push'](n[bU(0x1d2)](p));return{'raw':o,'cbMac':o[0x0]??0x0,'ccpText':o[0x3]??0x0,'ccpFtn':o[0x4]??0x0,'ccpHdd':o[0x5]??0x0,'ccpMcr':o[0x6]??0x0,'ccpAtn':o[0x7]??0x0,'ccpEdn':o[0x8]??0x0,'ccpTxbx':o[0x9]??0x0,'ccpHdrTxbx':o[0xa]??0x0};}function md(n,o){const bV=bw,p=new J(n),r={'_pairs':[]},s=[];for(let x=0x0;x<o&&x*0x8+0x8<=n[bV(0x184)];x+=0x1){const y=p[bV(0x185)](x*0x8),B=p['u32'](x*0x8+0x4),D=Zd[x]||bV(0x128)+x;r['fc'+D]=y,r['lcb'+D]=B,s['push']({'name':D,'fc':y,'lcb':B,'index':x});}return r['_pairs']=s,r;}const X={'sprmCFRMarkDel':0x800,'sprmCFRMark':0x801,'sprmCFFldVanish':0x802,'sprmCPicLocation':0x6a03,'sprmCIbstRMark':0x4804,'sprmCDttmRMark':0x6805,'sprmCFData':0x806,'sprmCFOle2':0x80a,'sprmCHighlight':0x2a0c,'sprmCIstd':0x4a30,'sprmCPlain':0x2a33,'sprmCFBold':0x835,'sprmCFItalic':0x836,'sprmCFStrike':0x837,'sprmCFOutline':0x838,'sprmCFShadow':0x839,'sprmCFSmallCaps':0x83a,'sprmCFCaps':0x83b,'sprmCFVanish':0x83c,'sprmCKul':0x2a3e,'sprmCDxaSpace':0x8840,'sprmCIco':0x2a42,'sprmCHps':0x4a43,'sprmCHpsPos':0x4845,'sprmCSymbol':0x6a09,'sprmCHpsKern':0x484b,'sprmCRgFtc0':0x4a4f,'sprmCRgFtc1':0x4a50,'sprmCRgFtc2':0x4a51,'sprmCCharScale':0x4852,'sprmCFDStrike':0x2a53,'sprmCFImprint':0x854,'sprmCFSpec':0x855,'sprmCFObj':0x856,'sprmCFEmboss':0x858,'sprmCFBiDi':0x85a,'sprmCFBoldBi':0x85c,'sprmCFItalicBi':0x85d,'sprmCFtcBi':0x4a5e,'sprmCIcoBi':0x4a60,'sprmCHpsBi':0x4a61,'sprmPIstd':0x4600,'sprmPIstdPermute':0xc601,'sprmPIncLvl':0x2602,'sprmPJc80':0x2403,'sprmPFKeep':0x2405,'sprmPFKeepFollow':0x2406,'sprmPFPageBreakBefore':0x2407,'sprmPIlvl':0x260a,'sprmPIlfo':0x460b,'sprmPChgTabsPapx':0xc60d,'sprmPDxaRight80':0x840e,'sprmPDxaLeft80':0x840f,'sprmPNest80':0x4610,'sprmPDxaLeft180':0x8411,'sprmPDyaLine':0x6412,'sprmPDyaBefore':0xa413,'sprmPDyaAfter':0xa414,'sprmPChgTabs':0xc615,'sprmPFInTable':0x2416,'sprmPFTtp':0x2417,'sprmPDxaAbs':0x8418,'sprmPDyaAbs':0x8419,'sprmPDxaWidth':0x841a,'sprmPPc':0x261b,'sprmPWr':0x2423,'sprmPBrcTop80':0x6424,'sprmPBrcLeft80':0x6425,'sprmPBrcBottom80':0x6426,'sprmPBrcRight80':0x6427,'sprmPBrcBetween80':0x6428,'sprmPBrcBar80':0x6629,'sprmPWHeightAbs':0x442b,'sprmPDcs':0x442c,'sprmPShd80':0x442d,'sprmPDyaFromText':0x842e,'sprmPDxaFromText':0x842f,'sprmPFLocked':0x2430,'sprmPFWidowControl':0x2431,'sprmPFBiDi':0x2441,'sprmPHugePapx':0x6646,'sprmPFAdjustRight':0x2448,'sprmPItap':0x6649,'sprmPDtap':0x664a,'sprmPFInnerTableCell':0x244b,'sprmPFInnerTtp':0x244c,'sprmPShd':0xc64d,'sprmPBrcTop':0xc64e,'sprmPBrcLeft':0xc64f,'sprmPBrcBottom':0xc650,'sprmPBrcRight':0xc651,'sprmPBrcBetween':0xc652,'sprmPBrcBar':0xc653,'sprmPDxcRight':0x4455,'sprmPDxcLeft':0x4456,'sprmPDxcLeft1':0x4457,'sprmPDylBefore':0x4458,'sprmPDylAfter':0x4459,'sprmPFDyaBeforeAuto':0x245b,'sprmPFDyaAfterAuto':0x245c,'sprmPDxaRight':0x845d,'sprmPDxaLeft':0x845e,'sprmPNest':0x465f,'sprmPDxaLeft1':0x8460,'sprmPJc':0x2461,'sprmTJc90':0x5400,'sprmTDxaLeft':0x9601,'sprmTDxaGapHalf':0x9602,'sprmTFCantSplit90':0x3403,'sprmTTableHeader':0x3404,'sprmTTableBorders80':0xd605,'sprmTDyaRowHeight':0x9407,'sprmTDefTable':0xd608,'sprmTDefTableShd80':0xd609,'sprmTTlp':0x740a,'sprmTFBiDi':0x560b,'sprmTDefTableShd3rd':0xd60c,'sprmTPc':0x360d,'sprmTDxaAbs':0x940e,'sprmTDyaAbs':0x940f,'sprmTDxaFromText':0x9410,'sprmTDyaFromText':0x9411,'sprmTDefTableShd':0xd612,'sprmTTableBorders':0xd613,'sprmTTableWidth':0xf614,'sprmTFAutofit':0x3615,'sprmTWidthBefore':0xf617,'sprmTWidthAfter':0xf618,'sprmTSetBrc80':0xd620,'sprmTInsert':0x7621,'sprmTDelete':0x5622,'sprmTDxaCol':0x7623,'sprmTMerge':0x5624,'sprmTSplit':0x5625,'sprmTTextFlow':0x7629,'sprmTVertMerge':0xd62b,'sprmTVertAlign':0xd62c,'sprmTSetShd':0xd62d,'sprmTSetShdOdd':0xd62e,'sprmTSetBrc':0xd62f,'sprmTCellPadding':0xd632,'sprmTCellPaddingDefault':0xd633,'sprmTCellWidth':0xd635,'sprmTFitText':0xf636,'sprmTFCellNoWrap':0xd639,'sprmTIstd':0x563a},id=new Set([X['sprmPChgTabs'],X[bw(0x188)],X['sprmTDefTable'],X['sprmTTableBorders80'],X['sprmTTableBorders'],X[bw(0x145)],X['sprmTDefTableShd80'],X[bw(0x140)],X['sprmTSetBrc80'],X['sprmTSetBrc'],X['sprmTSetShd'],X['sprmTSetShdOdd'],X[bw(0x180)],X['sprmTCellPaddingDefault'],X[bw(0x174)],X['sprmTVertAlign'],X['sprmTVertMerge'],X['sprmTTextFlow'],X['sprmTDxaCol']]);function Gd(m){return m>>0xd&0x7;}function N(m,n=0x0){return n+0x2>m['length']?0x0:(m[n]??0x0)|(m[n+0x1]??0x0)<<0x8;}function t(m,n=0x0){const o=N(m,n);return o>0x7fff?o-0x10000:o;}function Rl(m,n=0x0){const bW=bw;return n+0x4>m[bW(0x184)]?0x0:((m[n]??0x0)|(m[n+0x1]??0x0)<<0x8|(m[n+0x2]??0x0)<<0x10|(m[n+0x3]??0x0)<<0x18>>>0x0)>>>0x0;}function f(m,n=0x0){return{'first':m[n]??0x0,'lim':m[n+0x1]??0x0};}function C(n,o=0x0){if(o+0x4>n['length'])return null;const p=Rl(n,o)>>>0x0,r=p&0xff,s=p>>0x8&0xff,x=p>>0x10&0xff;return{'raw':p,'lineWidth':r,'borderType':s,'color':x};}function a(){const dt=['Unused1','i16','borderBar','length','u32','positionCode','#ff00ff','sprmPChgTabsPapx','sprmTJc90','cells','rightSiblingId','string','cupx','sprmPFDyaAfterAuto','removeEventListener','meta','doubleStrike','join','autoFit','prepend','paraProps','spacing','parentId','sprmPBrcBetween','rightIndent','6kgwlKC','sprmPPc','height','display','tcgrf','widthAfter','depth','distanceFromTextY','base64','actualByteEnd','dot-dot-dash','setShading','SttbfAtnBkmk','href','vertMerge','listLevel','merge','message','cell','100%','sprmPDyaLine','map','pageBreak','u16','push','fontFamilyId','empty','/Data','Unsupported\x20binary\x20input','charProps','readingInstruction','appendChild','base','table-layout','pictureOffset','509753RVMwAD','PlcfendTxt','</td>','72aoCYgJ','cloneNode','sprmPShd80','font-weight','width','split','highlight','offsetHeight','forEach','item','sprmTDyaAbs','sprmPBrcBar','tableWidth','SttbfFfn','margin-right','hideMark','#00ff00','dot-dash','i32','instruction','end','pop','firstElementChild','spacingBefore','keys','filter','array','PlcfSea','\x0a.msdoc-root{box-sizing:border-box;max-width:100%;padding:24px;background:#fff;color:#111;font:14px/1.6\x20-apple-system,BlinkMacSystemFont,\x22Segoe\x20UI\x22,sans-serif}\x0a.msdoc-root\x20*{box-sizing:border-box}\x0a.msdoc-paragraph{margin:0\x200\x208px;white-space:normal;word-break:break-word;overflow-wrap:anywhere}\x0a.msdoc-paragraph:last-child{margin-bottom:0}\x0a.msdoc-table{margin:12px\x200;border-collapse:collapse;border-spacing:0;max-width:100%}\x0a.msdoc-cell{padding:6px\x208px;vertical-align:top;word-break:break-word;overflow-wrap:anywhere}\x0a.msdoc-link{color:#1a73e8;text-decoration:none}\x0a.msdoc-link:hover{text-decoration:underline}\x0a.msdoc-image{display:inline-block;vertical-align:middle}\x0a.msdoc-attachment{display:inline-flex;align-items:center;gap:6px;padding:4px\x208px;border:1px\x20solid\x20#d0d7de;border-radius:6px;background:#f6f8fa;color:#0969da;text-decoration:none}\x0a.msdoc-attachments{margin-top:20px;padding-top:12px;border-top:1px\x20solid\x20#e5e7eb}\x0a.msdoc-attachments-title{font-weight:600;margin-bottom:8px}\x0a.msdoc-page-break{display:block;height:0;border-top:1px\x20dashed\x20#cbd5e1;margin:16px\x200}\x0a','sprmTSplit','windows-1252','left','overflow','white-space','3293598zkXgaG','sprmPJc','font-size','bytes','bold','alignment','#00ffff','rtl','prototype','renderOptions','range','PlcfAtnBkf','vertAlign','add','margin-top','setTimeout','pageBreakBefore','disconnect','u64','fibRgFcLcb','\x22\x20style=\x22','.viewer-export-content\x20.msdoc-page','collapse','\x0a.msdoc-zoom-viewer{\x0a\x20\x20box-sizing:border-box;\x0a\x20\x20height:100%;\x0a\x20\x20overflow:auto;\x0a\x20\x20background:#ececec;\x0a}\x0a.msdoc-zoom-viewer\x20.msdoc-stage{\x0a\x20\x20min-width:max-content;\x0a}\x0a.msdoc-zoom-viewer\x20.msdoc-page{\x0a\x20\x20position:relative;\x0a\x20\x20max-width:none;\x0a\x20\x20overflow:visible;\x0a}\x0a.msdoc-zoom-viewer\x20.msdoc-page\x20>\x20.msdoc-root{\x0a\x20\x20position:absolute;\x0a\x20\x20top:0;\x0a\x20\x20left:50%;\x0a\x20\x20width:','utf16le','borderTop','viewerZoomProvider','dtap','ceil','sprmPDxaRight','properties','vertical-align','transform-origin','image/gif','css','827572bzpkpT','pages','</a>','auto','borders','none','number','round','shading','asset-pkg','byteLength','nextOffset','type','boxShadow','sprmPIlvl','object','value','postMessage','resolveStyle','istdBase','text-shadow','view','dash-long-heavy','find','leftIndent','FIB\x20does\x20not\x20point\x20to\x20a\x20CLX\x20structure','style','replace','dotted','gridWidthTwips','single','sprmCFItalic','subarray','warn','sprmCFDStrike','text','PlcfandRef','top\x20left','sprmCFtcBi','3563975apHgWQ','top','stdfBase','Missing\x20table\x20stream','nonBreakingHyphen','direction','</tr>','frameWidth','shadow','slice','querySelectorAll','rgfc','remove','86660ISHYNz','styleName','dataset','toString','#008080','608248ZGszCo','fibRgLw','pieceTable','PlcftxbxTxt','Pms','sprmPFInnerTtp','children','</span>','entries','px\x20','wavy-double','447522yRHLNm','PlcSpaMom','state','rtlPara','rowHeight','cellNoWrap','9usTrEA','/WordDocument','matches','cellPadding','first','PgdFtnOldOld','trim','cpStart','PlcfFldMom','dataUrl','36aImxir','sprmCIco','sprmCFOle2','get','para','sprmCPlain','scale','PrEnvLand','set','msdoc-zoom-viewer','Field','module','error','SttbfAutoCaption','PgdEdnOldOld','max','#ff0000','byteOffset','distanceLeft','toLowerCase','PlcupcUsp','includePicture','name','assets','fontSizeHalfPoints','transform','#800000','sprmCFVanish','\x22\x20download=\x22','#ffff00','tableState','frameLeft','innerHTML','char','sprmTDefTableShd3rd','fcClx','fitText','compressed','ensure','sprmTDefTableShd','cpEnd','sprmPFInTable','hidden','mime','firstLineIndent','querySelector','from','styleId','stk','35RQBUoo','avoid','image/tiff','options','image','frameWrap','SttbFnm','sprmCIcoBi','PlcfWkb','spacingBeforeAuto','sprmPIlfo','actualByteStart',''','values','lcbClx','asset','sprmCFStrike','<span\x20class=\x22msdoc-page-break\x22></span>','#800080','styleIds','emboss','gapHalf','Unsupported\x20input\x20type','RouteSlip','min','translateX(-50%)\x20scale(','getInt8','</ul></section>','decode','table','fixed','isView','sprmTVertMerge','absTop','paragraphs','registerExportAdapter','smallCaps','sprmTCellWidth','paraState','paragraph','childElementCount','data','docxPaginated','application/octet-stream','text-decoration-style','AutosaveSource','#0000ff','color','fonts','sprmTCellPadding'];a=function(){return dt;};return a();}function Wd(m,n=0x0){const o=N(m,n);return{'raw':o,'horzMerge':o&0x3,'textFlow':o>>0x2&0x7,'vertMerge':o>>0x5&0x3,'vertAlign':o>>0x7&0x3,'ftsWidth':o>>0x9&0x7,'fitText':!!(o&0x1000),'noWrap':!!(o&0x2000),'hideMark':!!(o&0x4000)};}function lZ(m,n=0x0){const bX=bw;return n+0x14>m[bX(0x184)]?null:{'tcgrf':Wd(m,n),'wWidth':N(m,n+0x2),'borders':{'top':C(m,n+0x4)||{},'left':C(m,n+0x8)||{},'bottom':C(m,n+0xc)||{},'right':C(m,n+0x10)||{}}};}function Vd(n){const bY=bw;if(n['length']<0x3)return null;const o=N(n,0x0),p=n[0x2]??0x0;let r=0x3;const s=[];for(let y=0x0;y<p+0x1&&r+0x2<=n[bY(0x184)];y+=0x1)s['push'](t(n,r)),r+=0x2;const x=[];for(let B=0x0;B<p&&r+0x14<=n['length'];B+=0x1){const D=lZ(n,r);D&&x['push'](D),r+=0x14;}return{'cb':o,'numberOfColumns':p,'rgdxaCenter':s,'cells':x};}function A(m){return m['length']?{'cb':m[0x0]??0x0,'range':f(m,0x1),'value':m[0x3]??0x0,'extra':m['subarray'](0x4)}:null;}function nl(m){if(!m['length'])return null;const n=m[0x0]??0x0,o=N(m,0x4);return{'cb':n,'range':f(m,0x1),'ftsWidth':m[0x3]??0x0,'width':o,'wWidth':o};}function Xd(m){const c0=bw;return m['length']?{'cb':m[0x0]??0x0,'range':f(m,0x1),'border':C(m,0x3)||{},'extra':m[c0(0xea)](0x7)}:null;}function Yl(m){if(!m['length'])return null;const n=N(m,0x1);return{'ftsWidth':m[0x0]??0x0,'width':n,'wWidth':n};}function Rd(n){const c1=bw;if(!n[c1(0x184)])return null;const o=n[0x0]??0x0,p=f(n,0x1),r=p['lim']-p['first'];let s=0x3;const x=[];for(let B=0x0;B<r&&s+0x2<=n[c1(0x184)];B+=0x1)x[c1(0x1b2)](t(n,s)),s+=0x2;const y=[];for(let D=0x0;D<r&&s+0x14<=n['length'];D+=0x1)y['push'](lZ(n,s)),s+=0x14;return{'cb':o,'range':p,'itcFirst':p[c1(0x118)],'ctc':r,'dxaCol':x,'cells':y};}function ud(m,n,o){const p=o>>0xd&0x7;if(n>=m['length'])return 0x0;if(o===X['sprmTDefTable']){const r=N(m,n);return r?r+0x1:0x0;}if(id['has'](o))return(m[n]??0x0)+0x1;switch(p){case 0x0:return 0x1;case 0x1:return 0x1;case 0x2:return 0x2;case 0x3:return 0x4;case 0x4:return 0x2;case 0x5:return 0x2;case 0x6:return(m[n]??0x0)+0x1;case 0x7:return 0x3;default:return 0x0;}}function L(m){return!!(m[0x0]??0x0);}function u(m,n,o,p,r){return{'kind':m,'name':n,'value':o,'raw':p,'operandBytes':r};}function hd(n,o){const c2=bw,p=Gd(n),r=o,s=n;switch(n){case X['sprmCPicLocation']:return u('char',c2(0x1bc),Rl(r,0x0)>>>0x0,s,r);case X['sprmCFData']:return u(c2(0x13f),'data',L(r),s,r);case X[c2(0x120)]:return u('char','ole2',L(r),s,r);case X['sprmCIstd']:return u('char','charStyleId',N(r,0x0),s,r);case X[c2(0x123)]:return u('char','plain',L(r),s,r);case X['sprmCFBold']:return u(c2(0x13f),'bold',L(r),s,r);case X[c2(0xe9)]:return u(c2(0x13f),'italic',L(r),s,r);case X[c2(0x15f)]:return u('char','strike',L(r),s,r);case X['sprmCFOutline']:return u(c2(0x13f),'outline',L(r),s,r);case X['sprmCFShadow']:return u(c2(0x13f),c2(0xf9),L(r),s,r);case X['sprmCFSmallCaps']:return u('char','smallCaps',L(r),s,r);case X['sprmCFCaps']:return u('char','caps',L(r),s,r);case X[c2(0x139)]:return u('char','hidden',L(r),s,r);case X['sprmCKul']:return u('char','underline',r[0x0]??0x0,s,r);case X['sprmCDxaSpace']:return u(c2(0x13f),c2(0x196),t(r,0x0),s,r);case X[c2(0x11f)]:case X[c2(0x156)]:return u('char','colorIndex',r[0x0]??0x0,s,r);case X['sprmCHighlight']:{const x=r[0x0]??0x0,y={'index':x,'color':Sl[x]};return u('char','highlight',y,s,r);}case X['sprmCHps']:case X['sprmCHpsBi']:return u('char',c2(0x136),N(r,0x0),s,r);case X['sprmCHpsPos']:return u('char','positionHalfPoints',t(r,0x0),s,r);case X['sprmCSymbol']:return u('char','symbol',{'font':N(r,0x0),'charCode':N(r,0x2)},s,r);case X['sprmCRgFtc0']:case X['sprmCRgFtc1']:case X['sprmCRgFtc2']:case X[c2(0xf0)]:return u('char','fontFamilyId',N(r,0x0),s,r);case X['sprmCCharScale']:return u(c2(0x13f),c2(0x124),N(r,0x0),s,r);case X[c2(0xec)]:return u('char','doubleStrike',L(r),s,r);case X['sprmCFImprint']:return u(c2(0x13f),'imprint',L(r),s,r);case X['sprmCFSpec']:return u('char','special',L(r),s,r);case X['sprmCFObj']:return u('char','object',L(r),s,r);case X['sprmCFEmboss']:return u('char','emboss',L(r),s,r);case X['sprmCFBiDi']:return u('char','rtl',L(r),s,r);case X['sprmCFBoldBi']:return u('char','boldBi',L(r),s,r);case X['sprmCFItalicBi']:return u('char','italicBi',L(r),s,r);case X['sprmPIstd']:return u('para','styleId',N(r,0x0),s,r);case X['sprmPJc80']:case X[c2(0x1e3)]:return u('para',c2(0x1e7),r[0x0]??0x0,s,r);case X['sprmPFKeep']:return u('para','keepLines',L(r),s,r);case X['sprmPFKeepFollow']:return u('para','keepNext',L(r),s,r);case X['sprmPFPageBreakBefore']:return u(c2(0x122),c2(0x1f2),L(r),s,r);case X[c2(0x213)]:return u(c2(0x122),c2(0x1a9),r[0x0]??0x0,s,r);case X[c2(0x159)]:return u('para','listId',N(r,0x0),s,r);case X['sprmPDxaRight80']:case X[c2(0x1ff)]:return u('para','rightIndent',t(r,0x0),s,r);case X['sprmPDxaLeft80']:case X['sprmPDxaLeft']:return u('para','leftIndent',t(r,0x0),s,r);case X['sprmPDxaLeft180']:case X['sprmPDxaLeft1']:return u(c2(0x122),'firstLineIndent',t(r,0x0),s,r);case X[c2(0x1ae)]:return u(c2(0x122),'lineSpacing',t(r,0x0),s,r);case X['sprmPDyaBefore']:return u(c2(0x122),'spacingBefore',t(r,0x0),s,r);case X['sprmPDyaAfter']:return u('para','spacingAfter',t(r,0x0),s,r);case X[c2(0x147)]:return u(c2(0x122),'inTable',L(r),s,r);case X['sprmPFTtp']:return u('para','tableRowEnd',L(r),s,r);case X['sprmPDxaAbs']:return u('para','frameLeft',t(r,0x0),s,r);case X['sprmPDyaAbs']:return u('para','frameTop',t(r,0x0),s,r);case X['sprmPDxaWidth']:return u('para','frameWidth',t(r,0x0),s,r);case X[c2(0x19b)]:return u('para','framePosition',r[0x0]??0x0,s,r);case X['sprmPWr']:return u(c2(0x122),c2(0x154),r[0x0]??0x0,s,r);case X['sprmPBrcTop80']:case X['sprmPBrcTop']:return u('para',c2(0x1fb),C(r,0x0),s,r);case X['sprmPBrcLeft80']:case X['sprmPBrcLeft']:return u('para','borderLeft',C(r,0x0),s,r);case X['sprmPBrcBottom80']:case X['sprmPBrcBottom']:return u('para','borderBottom',C(r,0x0),s,r);case X['sprmPBrcRight80']:case X['sprmPBrcRight']:return u('para','borderRight',C(r,0x0),s,r);case X['sprmPBrcBetween80']:case X[c2(0x198)]:return u('para','borderBetween',C(r,0x0),s,r);case X['sprmPBrcBar80']:case X[c2(0x1cb)]:return u('para','borderBar',C(r,0x0),s,r);case X['sprmPWHeightAbs']:return u('para','frameHeight',t(r,0x0),s,r);case X[c2(0x1c2)]:case X['sprmPShd']:return u('para','shading',r['slice'](),s,r);case X['sprmPDyaFromText']:return u('para',c2(0x1a1),t(r,0x0),s,r);case X['sprmPDxaFromText']:return u('para','distanceFromTextX',t(r,0x0),s,r);case X['sprmPFLocked']:return u('para','locked',L(r),s,r);case X['sprmPFWidowControl']:return u(c2(0x122),'widowControl',L(r),s,r);case X['sprmPFBiDi']:return u('para','rtlPara',L(r),s,r);case X['sprmPFAdjustRight']:return u('para','adjustRight',L(r),s,r);case X['sprmPItap']:return u('para','itap',Rl(r,0x0),s,r);case X['sprmPDtap']:return u('para','dtap',Rl(r,0x0),s,r);case X['sprmPFInnerTableCell']:return u('para','innerTableCell',L(r),s,r);case X[c2(0x108)]:return u('para','innerTableRowEnd',L(r),s,r);case X['sprmPFDyaBeforeAuto']:return u('para',c2(0x158),L(r),s,r);case X[c2(0x18e)]:return u('para','spacingAfterAuto',L(r),s,r);case X[c2(0x189)]:return u('table','alignment',N(r,0x0),s,r);case X['sprmTDxaLeft']:return u('table',c2(0xe2),t(r,0x0),s,r);case X['sprmTDxaGapHalf']:return u('table','gapHalf',N(r,0x0),s,r);case X['sprmTFCantSplit90']:return u('table','cantSplit',L(r),s,r);case X['sprmTTableHeader']:return u(c2(0x16c),'header',L(r),s,r);case X['sprmTDyaRowHeight']:return u('table',c2(0x112),t(r,0x0),s,r);case X['sprmTDefTable']:return u('table','defTable',Vd(r),s,r);case X['sprmTFBiDi']:return u('table','rtl',L(r),s,r);case X['sprmTPc']:return u('table','positionCode',r[0x0]??0x0,s,r);case X['sprmTDxaAbs']:return u('table','absLeft',t(r,0x0),s,r);case X[c2(0x1ca)]:return u('table','absTop',t(r,0x0),s,r);case X['sprmTDxaFromText']:return u('table','distanceLeft',t(r,0x0),s,r);case X['sprmTDyaFromText']:return u('table','distanceTop',t(r,0x0),s,r);case X['sprmTTableWidth']:return u('table',c2(0x1cc),Yl(r),s,r);case X['sprmTFAutofit']:return u(c2(0x16c),'autoFit',L(r),s,r);case X['sprmTWidthBefore']:return u('table','widthBefore',Yl(r),s,r);case X['sprmTWidthAfter']:return u('table','widthAfter',Yl(r),s,r);case X['sprmTInsert']:return u('table','insertCells',Rd(r),s,r);case X['sprmTDelete']:return u('table','deleteCells',f(r,0x0),s,r);case X['sprmTDxaCol']:return u('table','columnWidth',nl(r),s,r);case X['sprmTMerge']:return u('table','merge',f(r,0x0),s,r);case X[c2(0x1dd)]:return u('table','split',f(r,0x0),s,r);case X['sprmTTextFlow']:return u('table','textFlow',A(r),s,r);case X[c2(0x16f)]:return u('table','vertMerge',A(r),s,r);case X['sprmTVertAlign']:return u(c2(0x16c),'vertAlign',A(r),s,r);case X['sprmTSetShd']:case X['sprmTSetShdOdd']:return u('table',c2(0x1a5),A(r),s,r);case X['sprmTSetBrc80']:case X['sprmTSetBrc']:return u('table','setBorder',Xd(r),s,r);case X['sprmTCellPadding']:case X['sprmTCellPaddingDefault']:return u('table',c2(0x117),nl(r),s,r);case X['sprmTCellWidth']:return u(c2(0x16c),'cellWidth',nl(r),s,r);case X['sprmTFitText']:return u('table','fitText',A(r),s,r);case X['sprmTFCellNoWrap']:return u('table',c2(0x113),A(r),s,r);case X['sprmTIstd']:return u('table','styleId',N(r,0x0),s,r);default:return{'kind':p===0x1?'para':p===0x2?c2(0x13f):p===0x5?'table':'unknown','name':'sprm_'+n['toString'](0x10),'value':r,'raw':n,'operandBytes':r};}}function ml(n,o,p){const r=[];let s=o;for(;s+0x2<=p;){const x=N(n,s);s+=0x2;const y=ud(n,s,x);if(!y||s+y>p)break;const B=n['subarray'](s,s+y);s+=y,r['push'](hd(x,B));}return r;}function ZZ(n,o,p){const c3=bw;if(o==null||p==null||p<=0x0)return{'aFC':[],'pages':[]};const r=n['subarray'](o,o+p),s=new J(r),x=Math['floor']((p-0x4)/0x8);if(x<=0x0)return{'aFC':[],'pages':[]};const y=[];for(let F=0x0;F<=x;F+=0x1)y['push'](s[c3(0x185)](F*0x4)>>>0x0);const B=[],D=(x+0x1)*0x4;for(let H=0x0;H<x;H+=0x1)B['push'](s['u32'](D+H*0x4)&0x3fffff);return{'aFC':y,'pages':B};}function Id(n,o){const c4=bw,p=o*0x200,r=n[c4(0xea)](p,p+0x200);if(r['length']<0x200)return null;const s=new J(r),x=s['u8'](0x1ff);if(!x||x>0x64)return null;const y=[];for(let H=0x0;H<=x;H+=0x1)y['push'](s['u32'](H*0x4)>>>0x0);const B=[],D=[],F=(x+0x1)*0x4;for(let I=0x0;I<x;I+=0x1){const K=s['u8'](F+I);B['push'](K),D['push'](K?p+K*0x2:0x0);}return{'crun':x,'rgfc':y,'rgb':B,'chpxOffsets':D};}function sd(n,o){const c5=bw,p=o*0x200,r=n['subarray'](p,p+0x200);if(r[c5(0x184)]<0x200)return null;const s=new J(r),x=s['u8'](0x1ff);if(x>0x1d)return null;const y=[];for(let H=0x0;H<=x;H+=0x1)y['push'](s['u32'](H*0x4)>>>0x0);const B=(x+0x1)*0x4,D=[],F=[];for(let I=0x0;I<x;I+=0x1){const K=s['u8'](B+I*0xd);D['push'](K),F['push'](K?p+K*0x2:0x0);}return{'cpara':x,'rgfc':y,'bOffsets':D,'papxOffsets':F};}function pd(o,r,x,y){const c6=bw,B=x['fibRgFcLcb']['fcPlcfBteChpx'],D=x[c6(0x1f5)]['lcbPlcfBteChpx'],F=ZZ(r,B,D),H=[];for(const K of F[c6(0x206)]){const P=Id(o,K);if(P)for(let Q=0x0;Q<P['crun'];Q+=0x1){const S=P[c6(0xfc)][Q]??0x0,T=P['rgfc'][Q+0x1]??S,U=hl(y,S),Y=hl(y,T);if(U==null||Y==null||Y<=U)continue;const a0=P['chpxOffsets'][Q]?ad(o,P['chpxOffsets'][Q]):[];H['push']({'cpStart':U,'cpEnd':Y,'fcStart':S,'fcEnd':T,'properties':a0});}}return H['sort']((a1,a2)=>a1['cpStart']-a2['cpStart']||a1['cpEnd']-a2[c6(0x146)]),H;}function yd(o,r,x,y){const c7=bw,B=x['fibRgFcLcb']['fcPlcfBtePapx'],D=x['fibRgFcLcb']['lcbPlcfBtePapx'],F=ZZ(r,B,D),H=[];for(const K of F['pages']){const P=sd(o,K);if(P)for(let Q=0x0;Q<P['cpara'];Q+=0x1){const S=P['rgfc'][Q]??0x0,T=P['rgfc'][Q+0x1]??S,U=hl(y,S),Y=hl(y,T);if(U==null||Y==null||Y<U)continue;const a0=P['papxOffsets'][Q]?nd(o,P['papxOffsets'][Q]):{'styleId':0x0,'properties':[]};H['push']({'cpStart':U,'cpEnd':Y,'fcStart':S,'fcEnd':T,'styleId':a0[c7(0x14d)],'properties':a0['properties'],'rawOffset':P['papxOffsets'][Q]??0x0});}}return H['sort']((a1,a2)=>a1['cpStart']-a2['cpStart']||a1[c7(0x146)]-a2['cpEnd']),H;}function ad(m,n){const c8=bw;if(n==null||n<0x0||n>=m[c8(0x184)])return[];const o=m[n]??0x0;if(!o)return[];const p=n+0x1,r=Math[c8(0x167)](m['length'],p+o);return ml(m,p,r);}function nd(n,o){const c9=bw;if(o==null||o<0x0||o>=n['length'])return{'styleId':0x0,'properties':[]};const p=new J(n),r=p['u8'](o);if(r===0x0&&!p[c9(0x144)](o+0x1,0x1))return{'styleId':0x0,'properties':[]};let s,x;if(r===0x0?(x=p['u8'](o+0x1)*0x2,s=o+0x2):(x=r-0x1,s=o+0x1),x<0x2||!p['ensure'](s,Math['max'](0x2,x)))return{'styleId':0x0,'properties':[]};const y=p[c9(0x1b1)](s),B=s+0x2,D=Math['min'](n[c9(0x184)],s+x),F=ml(n,B,D);return{'styleId':y,'properties':F};}function Yd(m,n){const ca=bw;let o=n;for(;o+0x1<m[ca(0x184)]&&!(m[o]===0x0&&m[o+0x1]===0x0);)o+=0x2;return{'value':new TextDecoder('utf-16le')['decode'](m['subarray'](n,o)),'nextOffset':Math['min'](m['length'],o+0x2)};}function Ld(o,r){const cb=bw;if(!o['length'])return null;const s=new J(o),x=s['u8'](0x0),y=s['u8'](0x1),B=s['u16'](0x2),D=s['u8'](0x4),F=s['u8'](0x5),H=s[cb(0xfa)](0x6,0xa),K=s[cb(0xfa)](0x10,0x18),P=0x28;let Q='',S='';if(o[cb(0x184)]>P){const T=new TextDecoder('utf-16le')['decode'](o['subarray'](P))['split']('\x00')['filter'](Boolean);if(Q=T[0x0]||'',S=T[0x1]||'',!S&&F){const U=P+F*0x2;U+0x2<=o['length']&&(S=Yd(o,U)['value']);}}return{'index':r,'cbFfnM1':x,'ffid':y,'weight':B,'charset':D,'ixchSzAlt':F,'panose':H,'fontSignature':K,'name':Q,'altName':S};}function Jd(n,o){const ce=bw,r=o['fcSttbfFfn'],x=o['lcbSttbfFfn'];if(r==null||x==null||x<=0x0)return{'header':null,'fonts':[],'byIndex'(P){return P==null,null;}};const y=n['subarray'](r,r+x),B=new J(y),D=B['u16'](0x0),F=B['u16'](0x2);let H=0x4;const K=[];for(let P=0x0;P<D&&H<y['length'];P+=0x1){const Q=B['u8'](H)+0x1,S=y['subarray'](H,Math['min'](H+Q,y[ce(0x184)])),T=Ld(S,P);T&&K[ce(0x1b2)](T),H+=Q+F;}return{'header':{'cData':D,'cbExtra':F},'fonts':K,'byIndex'(U){return U==null||U<0x0?null:K[U]||null;}};}function dZ(m,n,o=0x0){const cf=bw;if(o+n['length']>m['length'])return!0x1;for(let p=0x0;p<n[cf(0x184)];p+=0x1)if(m[o+p]!==n[p])return!0x1;return!0x0;}function od(m){const cg=bw,n=[{'mime':'image/png','magic':[0x89,0x50,0x4e,0x47],'end':Ud},{'mime':'image/jpeg','magic':[0xff,0xd8,0xff],'end':Fd},{'mime':cg(0x203),'magic':[0x47,0x49,0x46,0x38],'end':td},{'mime':'image/bmp','magic':[0x42,0x4d],'end':Sd},{'mime':'image/tiff','magic':[0x49,0x49,0x2a,0x0],'end':null},{'mime':cg(0x151),'magic':[0x4d,0x4d,0x0,0x2a],'end':null},{'mime':'image/emf','magic':[0x1,0x0,0x0,0x0],'end':xd},{'mime':'image/wmf','magic':[0xd7,0xcd,0xc6,0x9a],'end':null}];for(let o=0x0;o<m['length']-0x4;o+=0x1)for(const p of n)if(dZ(m,p['magic'],o)){const r=p['end']?p[cg(0x1d4)](m,o):m[cg(0x184)];return{'mime':p[cg(0x149)],'start':o,'end':r||m[cg(0x184)]};}return null;}function Ud(m,n){for(let o=n+0x8;o+0x8<m['length'];o+=0x1)if(dZ(m,[0x49,0x45,0x4e,0x44],o))return o+0x8;return m['length'];}function Fd(m,n){for(let o=n+0x2;o+0x1<m['length'];o+=0x1)if(m[o]===0xff&&m[o+0x1]===0xd9)return o+0x2;return m['length'];}function td(m,n){const ch=bw;for(let o=n+0x6;o<m['length'];o+=0x1)if(m[o]===0x3b)return o+0x1;return m[ch(0x184)];}function Sd(m,n){const ci=bw;if(n+0x6<=m['length']){const o=new J(m[ci(0xea)](n))['u32'](0x2);if(o>0x0&&n+o<=m['length'])return n+o;}return m['length'];}function xd(m,n){if(n+0x30<=m['length']){const o=new J(m['subarray'](n))['u32'](0x28);if(o>0x0&&n+o<=m['length'])return n+o;}return m['length'];}function Nd(n,o,p={}){const cj=bw;if(!n||o==null||o<0x0||o+0x44>n['length'])return null;const r=new J(n),s=r['i32'](o),x=r['u16'](o+0x4),y=s>0x0&&o+s<=n['length']?s:Math['min'](n['length']-o,p['maxPictureBytes']||0x8*0x400*0x400),B=n['subarray'](o,o+y),D=Math['min'](x||0x44,B['length']),F=od(B['subarray'](D));if(!F)return{'id':M('asset-img'),'type':'image','mime':cj(0x17a),'bytes':B,'dataUrl':ul(B,'application/octet-stream'),'meta':{'pictureOffset':o,'lcb':s,'cbHeader':x}};const H=D+F['start'],K=Math['min'](D+F['end'],B['length']),P=B['subarray'](H,K);return{'id':M('asset-img'),'type':'image','mime':F['mime'],'bytes':P,'dataUrl':ul(P,F['mime']),'meta':{'pictureOffset':o,'lcb':s,'cbHeader':x}};}function Ll(m,n){let o=n;for(;o<m['length']&&m[o]!==0x0;)o+=0x1;return{'value':new TextDecoder('windows-1252')['decode'](m['subarray'](n,o)),'nextOffset':o+0x1};}function Kd(n){const ck=bw,o=new J(n),p=[0x4,0x6];for(const r of p)try{let s=r;const x=Ll(n,s);s=x['nextOffset'];const y=Ll(n,s);s=y['nextOffset'];const B=Ll(n,s);if(s=B['nextOffset'],s+0x4>n['length'])continue;const D=o['u32'](s);if(s+=0x4,D>0x0&&s+D<=n['length']){const F=n['subarray'](s,s+D);return{'label':x[ck(0x215)],'originalPath':y['value'],'tempPath':B['value'],'dataSize':D,'bytes':F};}}catch{}return null;}function Hd(n,o){const cm=bw,p=n['listChildren'](o)['filter'](D=>D['objectType']===0x2||D['objectType']===0x5),r=new Map(p['map'](D=>[D[cm(0x134)]['toLowerCase'](),D])),s=r[cm(0x121)]('\x03objinfo')||r['get']('\x03objinfo')||r['get'](String['fromCharCode'](0x3)+'objinfo'),x=r['get']('\x01ole10native')||r['get']('\x01ole10native')||r['get'](String['fromCharCode'](0x1)+'ole10native'),y=r['get']('package')||r['get']('contents')||r['get']('content'),B={'entry':o,'streams':p,'displayName':o['name'],'attachment':null,'objectData':null};if(x){const D=n['getStream'](x)||new Uint8Array(0x0),F=Kd(D);if(F){const H=F['label']||F['originalPath']['split'](/[\\/]/)['pop']()||o['name']+'.bin',I={'id':M('asset-ole'),'type':'attachment','name':H,'mime':cm(0x17a),'bytes':F['bytes'],'dataUrl':ul(F['bytes'],'application/octet-stream'),'meta':F};return B['attachment']=I,B;}}if(y){const K=n['getStream'](y)||new Uint8Array(0x0),P={'id':M(cm(0x20e)),'type':'attachment','name':ql(o['name'])+'.bin','mime':'application/octet-stream','bytes':K,'dataUrl':ul(K,'application/octet-stream'),'meta':{'stream':y['name']}};B['attachment']=P;}return s&&(B['objectData']=n['getStream'](s)||new Uint8Array(0x0)),B;}function Td(m){const cn=bw,n=m['getEntry']('/ObjectPool');if(!n)return new Map();const o=m['listChildren'](n)['filter'](r=>r['objectType']===0x1),p=new Map();for(const r of o)p['set'](r[cn(0x134)],Hd(m,r));return p;}function Jl(m){const co=bw,n={'bold':!0x1,'italic':!0x1,'strike':!0x1,'underline':0x0,'fontSizeHalfPoints':void 0x0,'fontFamilyId':void 0x0,'colorIndex':void 0x0,'highlight':void 0x0,'spacing':0x0,'positionHalfPoints':0x0,'scale':0x64,'hidden':!0x1,'smallCaps':!0x1,'caps':!0x1,'outline':!0x1,'shadow':!0x1,'emboss':!0x1,'imprint':!0x1,'rtl':!0x1,'pictureOffset':void 0x0,'data':!0x1,'ole2':!0x1,'object':!0x1,'special':!0x1,'charStyleId':void 0x0};for(const o of m||[])switch(o['name']){case'plain':o['value']&&(n['bold']=!0x1,n['italic']=!0x1,n['strike']=!0x1,n['underline']=0x0,n[co(0x173)]=!0x1,n['caps']=!0x1);break;case co(0x1e6):case'italic':case'strike':case co(0x148):case'smallCaps':case'caps':case'outline':case'shadow':case co(0x163):case'imprint':case co(0x1e9):case'data':case'ole2':case'object':case'special':n[o[co(0x134)]]=!!o['value'];break;case'underline':n['underline']=o[co(0x215)]??0x0;break;case'fontSizeHalfPoints':n['fontSizeHalfPoints']=o['value'];break;case co(0x1b3):n['fontFamilyId']=o['value'];break;case'colorIndex':n['colorIndex']=o['value'];break;case co(0x1c6):n[co(0x1c6)]=o['value'];break;case'spacing':n[co(0x196)]=o['value']||0x0;break;case'positionHalfPoints':n['positionHalfPoints']=o['value']||0x0;break;case'scale':n['scale']=o['value']||0x64;break;case'pictureOffset':n[co(0x1bc)]=o['value'];break;case'charStyleId':n['charStyleId']=o['value'];break;default:n[o['name']]=o['value'];break;}return n;}function Qd(m){const cp=bw,n={'styleId':0x0,'alignment':0x0,'spacingBefore':0x0,'spacingAfter':0x0,'lineSpacing':0x0,'leftIndent':0x0,'rightIndent':0x0,'firstLineIndent':0x0,'keepLines':!0x1,'keepNext':!0x1,'pageBreakBefore':!0x1,'widowControl':!0x1,'inTable':!0x1,'tableRowEnd':!0x1,'innerTableCell':!0x1,'innerTableRowEnd':!0x1,'itap':0x0,'dtap':0x0,'listLevel':void 0x0,'listId':void 0x0,'rtlPara':!0x1,'adjustRight':!0x1,'frameLeft':void 0x0,'frameTop':void 0x0,'frameWidth':void 0x0,'frameHeight':void 0x0,'framePosition':void 0x0,'frameWrap':void 0x0,'borders':{},'shading':void 0x0};for(const o of m||[])switch(o[cp(0x134)]){case'styleId':n['styleId']=o['value']||0x0;break;case'alignment':n['alignment']=o['value']??0x0;break;case cp(0x1d7):n['spacingBefore']=o['value']||0x0;break;case'spacingAfter':n['spacingAfter']=o[cp(0x215)]||0x0;break;case'lineSpacing':n['lineSpacing']=o['value']||0x0;break;case cp(0xe2):n['leftIndent']=o['value']||0x0;break;case cp(0x199):n['rightIndent']=o['value']||0x0;break;case'firstLineIndent':n['firstLineIndent']=o['value']||0x0;break;case'keepLines':case'keepNext':case'pageBreakBefore':case'widowControl':case'inTable':case'tableRowEnd':case'innerTableCell':case'innerTableRowEnd':case cp(0x111):case'adjustRight':n[o['name']]=!!o['value'];break;case'itap':n['itap']=o[cp(0x215)]||0x0;break;case'dtap':n['dtap']=o['value']||0x0;break;case'listLevel':n['listLevel']=o['value'];break;case'listId':n['listId']=o['value'];break;case'frameLeft':n[cp(0x13d)]=o['value'];break;case'frameTop':n['frameTop']=o['value'];break;case cp(0xf8):n['frameWidth']=o['value'];break;case'frameHeight':n['frameHeight']=o['value'];break;case'framePosition':n['framePosition']=o['value'];break;case'frameWrap':n['frameWrap']=o['value'];break;case'borderTop':n['borders']['top']=o['value'];break;case'borderLeft':n[cp(0x209)]['left']=o['value'];break;case'borderBottom':n['borders']['bottom']=o['value'];break;case'borderRight':n['borders']['right']=o['value'];break;case'borderBetween':n['borders']['between']=o[cp(0x215)];break;case cp(0x183):n['borders']['bar']=o[cp(0x215)];break;case'shading':n['shading']=o['value'];break;default:n[o['name']]=o['value'];break;}return n;}function Il(m){const cq=bw,n={'styleId':void 0x0,'alignment':0x0,'leftIndent':0x0,'gapHalf':0x0,'cantSplit':!0x1,'header':!0x1,'rowHeight':0x0,'rtl':!0x1,'positionCode':void 0x0,'absLeft':void 0x0,'absTop':void 0x0,'distanceLeft':void 0x0,'distanceTop':void 0x0,'tableWidth':void 0x0,'autoFit':void 0x0,'widthBefore':void 0x0,'widthAfter':void 0x0,'defTable':void 0x0,'operations':[]};for(const o of m||[])switch(o['name']){case'styleId':n['styleId']=o['value'];break;case cq(0x1e7):n[cq(0x1e7)]=o[cq(0x215)]??0x0;break;case'leftIndent':n['leftIndent']=o['value']||0x0;break;case cq(0x164):n['gapHalf']=o[cq(0x215)]||0x0;break;case'cantSplit':case'header':case'rtl':n[o['name']]=!!o[cq(0x215)];break;case'rowHeight':n['rowHeight']=o['value']||0x0;break;case cq(0x186):n['positionCode']=o['value'];break;case'absLeft':n['absLeft']=o[cq(0x215)];break;case cq(0x170):n['absTop']=o['value'];break;case cq(0x130):n['distanceLeft']=o['value'];break;case'distanceTop':n['distanceTop']=o[cq(0x215)];break;case'tableWidth':n['tableWidth']=o['value'];break;case cq(0x193):n['autoFit']=o['value'];break;case'widthBefore':n['widthBefore']=o['value'];break;case cq(0x19f):n['widthAfter']=o['value'];break;case'defTable':n['defTable']=o['value'];break;default:n['operations']['push'](o);break;}return n;}function xl(m){const cr=bw;return m?.['inTable']?Math['max'](0x1,m['itap']||0x0||(m[cr(0x1fd)]?m['dtap']:0x1)):0x0;}function ed(m){const cs=bw;return _Z[m]||cs(0x1df);}function kd(m){const ct=bw;return $Z[m]||(m?'single':ct(0x20a));}function zd(m){return ld[m]||'top';}function E(n,o,p){if(!o)return;const r=Math['max'](0x0,o['first']||0x0),s=Math['max'](r,o['lim']||r);for(let x=r;x<s&&x<n['length'];x+=0x1)p(n[x],x);}function Bd(m){const cu=bw,n=m?.['defTable'];if(!n||!Array['isArray'](n['cells']))return[];const o=n['cells']['map']((p,r)=>({'index':r,'width':p?.['wWidth'],'ftsWidth':p?.['tcgrf']?.['ftsWidth'],'borders':p?.['borders']||{},'merge':p?.['tcgrf']?.['horzMerge']||0x0,'vertMerge':p?.[cu(0x19e)]?.['vertMerge']||0x0,'vertAlign':p?.['tcgrf']?.[cu(0x1ee)]||0x0,'fitText':!!p?.[cu(0x19e)]?.[cu(0x142)],'noWrap':!!p?.['tcgrf']?.['noWrap'],'hideMark':!!p?.['tcgrf']?.[cu(0x1cf)],'textFlow':p?.['tcgrf']?.['textFlow']||0x0,'rightBoundary':n['rgdxaCenter']?.[r+0x1],'leftBoundary':n['rgdxaCenter']?.[r]}));for(const p of m['operations']||[])switch(p['name']){case'merge':E(o,p['value'],(r,s)=>{const cv=cu,x=p['value'];s===x['first']?r[cv(0x1aa)]=0x2:r['merge']=0x1;});break;case'split':E(o,p['value'],r=>{r['merge']=0x0;});break;case'cellWidth':case'columnWidth':E(o,p['value'][cu(0x1ec)],r=>{const s=p['value'];r['width']=s['width'],r['ftsWidth']=s['ftsWidth'];});break;case cu(0x1a8):E(o,p['value']['range'],r=>{const cw=cu;r[cw(0x1a8)]=p['value'][cw(0x215)];});break;case'vertAlign':E(o,p['value']['range'],r=>{r['vertAlign']=p['value']['value'];});break;case'setBorder':E(o,p['value']['range'],r=>{const cx=cu;r['borders']={...r[cx(0x209)]||{},'all':p['value']['border']};});break;case'setShading':E(o,p['value']['range'],r=>{const cy=cu;r['shading']=p['value'][cy(0x215)];});break;case cu(0x142):E(o,p['value'][cu(0x1ec)],r=>{const cz=cu;r[cz(0x142)]=!!p['value'][cz(0x215)];});break;case'cellNoWrap':E(o,p[cu(0x215)]['range'],r=>{r['noWrap']=!!p['value']['value'];});break;case'textFlow':E(o,p['value']['range'],r=>{const cA=cu;r['textFlow']=p['value'][cA(0x215)];});break;}return o;}function q(...m){const cB=bw,n=new Map();for(const o of m)for(const p of o||[])n['set'](p['kind']+':'+p['name'],p);return Array['from'](n[cB(0x15c)]());}function Cd(m){const n={'para':[],'char':[],'table':[]};for(const o of m||[])o['kind']==='para'?n['para']['push'](o):o['kind']==='char'?n['char']['push'](o):o['kind']==='table'&&n['table']['push'](o);return n;}function Md(n,o){const p=new J(n),r=p['u16'](o),s=o+0x2,x=r*0x2,y=p['utf16le'](s,x),B=s+x+0x2;return{'value':y['replace'](/\u0000+$/,''),'nextOffset':B};}function b(c,d){c=c-0xe1;const e=a();let f=e[c];return f;}function Ed(n,o){const cC=bw,p=new J(n),r=p['u16'](o),s=p['u16'](o+0x2),x=p[cC(0x1b1)](o+0x4);return{'sti':r&0xfff,'flags1':r>>0xc,'stk':s&0xf,'istdBase':s>>0x4&0xfff,'cupx':x&0xf,'istdNext':x>>0x4&0xfff,'bchUpe':p['u16'](o+0x6),'grfstd':p['u16'](o+0x8)};}function jl(n,o){const p=new J(n)['u16'](o),r=o+0x2,s=r+p,x=n['subarray'](r,Math['min'](s,n['length']));let y=0x0,B=[];return x['length']>=0x2&&(y=x[0x0]|(x[0x1]??0x0)<<0x8,B=ml(x,0x2,x['length'])),{'cbUpx':p,'styleId':y,'properties':B,'nextOffset':dl(s)};}function ol(n,o){const cD=bw,p=new J(n)['u16'](o),r=o+0x2,s=r+p,x=n['subarray'](r,Math['min'](s,n['length'])),y=ml(x,0x0,x[cD(0x184)]);return{'cbUpx':p,'properties':y,'nextOffset':dl(s)};}function jd(n,o){const cE=bw,p=new J(n)['u16'](o),r=o+0x2,s=r+p,x=n[cE(0xea)](r,Math['min'](s,n['length'])),y=ml(x,0x0,x['length']);return{'cbUpx':p,'properties':y,'nextOffset':dl(s)};}function Pd(n,o,p){const cF=bw;if(!n['length'])return{'istd':p,'empty':!0x0,'name':'','stdfBase':{'istdBase':0xfff,'istdNext':0x0,'stk':0x1,'cupx':0x0},'paraProps':[],'charProps':[],'tableProps':[]};const r=Math['max'](0xa,Math['min'](o||0xa,n['length'])),s=Ed(n,0x0);let x=r;const y=Md(n,x);x=y['nextOffset'];let B=[],D=[],F=[];try{if(s[cF(0x14e)]===0x1){if(s['cupx']>=0x1&&x+0x2<=n['length']){const H=jl(n,x);B=H['properties'],x=H['nextOffset'];}s[cF(0x18d)]>=0x2&&x+0x2<=n['length']&&(D=ol(n,x)['properties']);}else{if(s[cF(0x14e)]===0x2)x+0x2<=n[cF(0x184)]&&(D=ol(n,x)[cF(0x200)]);else{if(s['stk']===0x3){if(s['cupx']>=0x1&&x+0x2<=n['length']){const I=jd(n,x);F=I['properties'],x=I[cF(0x210)];}if(s['cupx']>=0x2&&x+0x2<=n[cF(0x184)]){const K=jl(n,x);B=K['properties'],x=K['nextOffset'];}s['cupx']>=0x3&&x+0x2<=n['length']&&(D=ol(n,x)['properties']);}}}}catch{}return{'istd':p,'name':y['value'],'stdfBase':s,'paraProps':B,'charProps':D,'tableProps':F,'empty':!0x1};}function vd(o,r){const cG=bw,x=r['fcStshf'],y=r['lcbStshf'];if(x==null||y==null||y<=0x0)return{'styles':new Map(),'header':null,'resolveStyle'(a7){return Nl(new Map(),a7);}};const B=o['subarray'](x,x+y),D=new J(B),F=D['u16'](0x0),P=0x2,T=D['u16'](P+0x0),a0=D['u16'](P+0x2),a1=D[cG(0x1b1)](P+0xa),a2=D['u16'](P+0xc),a3=D['u16'](P+0xe),a4={'cbStshi':F,'cstd':T,'cbSTDBaseInFile':a0,'ftcAsci':a1,'ftcFE':a2,'ftcOther':a3};let a5=0x2+F;const a6=new Map();for(let a7=0x0;a7<T&&a5+0x2<=B[cG(0x184)];a7+=0x1){const a8=D['u16'](a5),a9=a5+0x2,aa=a9+a8;if(a8===0x0){a6[cG(0x126)](a7,{'istd':a7,'empty':!0x0,'name':'','stdfBase':{'istdBase':0xfff,'istdNext':0x0,'stk':0x1,'cupx':0x0},'paraProps':[],'charProps':[],'tableProps':[]}),a5=dl(aa);continue;}const ab=B['subarray'](a9,Math['min'](aa,B['length'])),ae=Pd(ab,a0,a7);a6['set'](a7,ae),a5=dl(aa);}return{'header':a4,'styles':a6,'resolveStyle'(af){return Nl(a6,af);}};}function Nl(m,n,o=new Set()){const cH=bw;if(n==null||n===0xfff||o['has'](n))return{'paraProps':[],'charProps':[],'tableProps':[],'styleIds':[]};const p=m['get'](n);if(!p||p[cH(0x1b4)])return{'paraProps':[],'charProps':[],'tableProps':[],'styleIds':[]};o['add'](n);const r=Nl(m,p[cH(0xf3)]?.['istdBase'],o);return{'styleIds':[...r[cH(0x162)],n],'paraProps':q(r['paraProps'],p[cH(0x195)]),'charProps':q(r[cH(0x1b7)],p['charProps']),'tableProps':q(r['tableProps'],p['tableProps'])};}function gd(n,o,p,r){const cI=bw;let s=r?.['index']||0x0;for(;s<n['length']&&n[s]['cpEnd']<=o;)s+=0x1;r&&(r['index']=s);const x=[];let y=s;for(;y<n['length']&&n[y][cI(0x11b)]<p;)n[y]['cpEnd']>o&&x['push'](n[y]),y+=0x1;return x;}function wd(m){return String(m||'')['trim']();}function Pl(n){const cJ=bw,o=String(n||'')['replace'](/[\r\n\t]+/g,'\x20')['replace'](/\s+/g,'\x20')[cJ(0x11a)]();if(!o)return null;const p=o['toUpperCase']();if(p['startsWith']('HYPERLINK')){const r=o['slice'](0x9)['trim'](),s=r['match'](/"([^"]+)"/)?.[0x1]||r['split'](/\s+/)[0x0]||'';return s?{'type':'hyperlink','href':s}:null;}if(p['startsWith']('INCLUDEPICTURE')){const x=o['slice'](0xe)[cJ(0x11a)]();return{'type':cJ(0x133),'target':x['match'](/"([^"]+)"/)?.[0x1]||x[cJ(0x1c5)](/\s+/)[0x0]||''};}return p['startsWith']('EMBED')?{'type':'embed','raw':o}:p['startsWith']('LINK')?{'type':'link','raw':o}:{'type':'unknown','raw':o};}function rd(m,n){const cK=bw;if(!n['text'])return;const o=m[m['length']-0x1];if(o&&o[cK(0x211)]==='text'&&o[cK(0x1a7)]===n['href']&&$l(o['style'],n[cK(0xe4)])){o['text']+=n['text'];return;}m[cK(0x1b2)](n);}function O(m,n,o){const cL=bw;if(!o)return;const p=m['length']?m[m[cL(0x184)]-0x1]['nodes']:n;o['type']==='text'?rd(p,o):p['push'](o);}function Od(m,n){const cM=bw,o=['_'+n,'_'+String(n),'_'+n[cM(0x101)](0x10),'_'+n['toString'](0x10)['toUpperCase']()];for(const p of o)if(m['has'](p))return m['get'](p)||null;return null;}function fd(n,o,p,r,s,x={}){return function(y){const cN=b,B=y?.[cN(0x1bc)];if(B==null)return null;if(s['has'](B))return s[cN(0x121)](B)||null;let D=null;const F=Od(o,B);if((y['ole2']||y['object']||y['data'])&&F?.['attachment']&&(D=F['attachment'],r[cN(0x1ef)](F['entry']['name'])),!D&&n?.['length']){const H=Nd(n,B,x);H&&H['mime']!=='application/octet-stream'?D=H:!D&&F?.['attachment']?(D=F['attachment'],r['add'](F['entry']['name'])):H&&(D=H);}return!D&&F?.['attachment']&&(D=F['attachment'],r['add'](F['entry']['name'])),D&&p[cN(0x1b2)](D),s['set'](B,D),D;};}function Dd(m){const cO=bw;switch(m){case z[cO(0xf5)]:return'-';case z['nonRequiredHyphen']:return'';case z['annotationRef']:return'';default:return m;}}function Ad(n,o){const cP=bw,p=[],r=[];for(const s of n)if(!(!s['text']||s['state'][cP(0x148)]))for(const x of s['text']){const y=Dd(x);if(y===z['fieldStart']){r['push']({'instruction':'','parsed':null,'readingInstruction':!0x0,'nodes':[]});continue;}if(y===z['fieldSeparator']){const D=r[r['length']-0x1];D&&(D['parsed']=Pl(D['instruction']),D[cP(0x1b8)]=!0x1);continue;}if(y===z['fieldEnd']){const F=r['pop']();if(!F)continue;let H=F['nodes'];if(F['readingInstruction']&&(F['parsed']=Pl(F['instruction'])),F['parsed']?.['type']==='hyperlink'){const I=F['parsed']['href'];H=H['map'](K=>K['type']==='lineBreak'||K['type']===cP(0x1b0)?K:{...K,'href':I});}for(const K of H)O(r,p,K);continue;}const B=r[r['length']-0x1];if(B?.['readingInstruction']){B[cP(0x1d3)]+=y;continue;}if(y===z['hardLineBreak']){O(r,p,{'type':'lineBreak'});continue;}if(y===z['pageBreak']){O(r,p,{'type':'pageBreak'});continue;}if(y===z['picture']){const P=o(s['state']);P?.['type']==='image'?O(r,p,{'type':'image','asset':P,'style':s[cP(0x110)]}):P?.['type']==='attachment'&&O(r,p,{'type':'attachment','asset':P,'style':s['state']});continue;}O(r,p,{'type':'text','text':HZ(y),'style':s['state']});}for(;r['length'];){const Q=r['pop']();for(const S of Q['nodes'])O(r,p,S);}return p;}function qd(o,p,r,x,y,F,P){const cQ=bw,T=gd(r,o['cpStart'],o['cpEnd'],P),a0=new Set([o['cpStart'],o['cpEnd']]);for(const a3 of T)a0['add'](Math['max'](o['cpStart'],a3[cQ(0x11b)])),a0['add'](Math[cQ(0x167)](o[cQ(0x146)],a3['cpEnd']));const a1=Array['from'](a0)['sort']((a4,a5)=>a4-a5),a2=[];for(let a4=0x0;a4<a1['length']-0x1;a4+=0x1){const a5=a1[a4],a6=a1[a4+0x1];if(a6<=a5)continue;const a7=T['find'](aj=>aj['cpStart']<=a5&&aj['cpEnd']>=a6)?.['properties']||[],a8=Jl(a7),a9=a8['charStyleId']!=null?x[cQ(0x217)](a8['charStyleId'])['charProps']:[],aa=q(y,a9,a7),ab=Jl(aa),ae=F(ab['fontFamilyId']);ae&&(ab['fontFamily']=ae['name']||ae['altName']||void 0x0);const af=a5-o['cpStart'],ag=a6-o[cQ(0x11b)],ah=p['slice'](af,ag);if(!ah)continue;const ai=a2[a2['length']-0x1];if(ai&&$l(ai['state'],ab)){ai['text']+=ah,ai['cpEnd']=a6;continue;}a2[cQ(0x1b2)]({'cpStart':a5,'cpEnd':a6,'text':ah,'state':ab});}if(!a2['length']&&p){const aj=Jl(y),ak=F(aj['fontFamilyId']);ak&&(aj['fontFamily']=ak['name']||ak['altName']||void 0x0),a2['push']({'cpStart':o['cpStart'],'cpEnd':o[cQ(0x146)],'text':p,'state':aj});}return a2;}function $d(o,r,x,y,B,D,F){const cR=bw,K=Cd(o['properties']||[]),P=o['styleId']||K['para']['find'](a7=>a7['name']==='styleId')?.[cR(0x215)]||0x0,Q=x['resolveStyle'](P),T=q(Q['paraProps'],K[cR(0x122)]),U=Qd(T),a0=Il(K[cR(0x16c)]),a1=a0['styleId']!=null?x['resolveStyle'](a0['styleId'])['tableProps']:[],a2=q(a1,K['table']),a3=Il(a2),a4=Q['charProps'],a5=qd(o,r,B,x,a4,a7=>y['byIndex'](a7),F),a6=Ad(a5,D);return{'id':M(cR(0x122)),'cpStart':o['cpStart'],'cpEnd':o['cpEnd'],'terminator':o['terminator']||'','text':r,'rawProperties':o['properties']||[],'styleId':P,'styleName':wd(x['styles']['get'](P)?.['name']),'paraProps':T,'paraState':U,'tableProps':a2,'tableState':a3,'segments':a5,'inlines':a6};}function _d(n){const cS=bw;for(const o of n)for(let p=0x0;p<o['cells'][cS(0x184)];p+=0x1){const r=o['cells'][p],s=r['meta']?.['merge']||0x0;if(r['colIndex']=p,r['colspan']=0x1,r['rowspan']=0x1,r['hidden']=!0x1,s===0x1){r['hidden']=!0x0;continue;}if(s>0x1){let x=p+0x1;for(;x<o['cells']['length']&&(o['cells'][x][cS(0x190)]?.[cS(0x1aa)]||0x0)===0x1;)o['cells'][x][cS(0x148)]=!0x0,r['colspan']+=0x1,x+=0x1;}}for(let y=0x0;y<n[cS(0x184)];y+=0x1){const B=n[y];for(const D of B['cells']){if(D['hidden'])continue;const F=D['meta']?.['vertMerge']||0x0;if(F===0x1){D['hidden']=!0x0;continue;}if(F>0x1){let H=y+0x1;for(;H<n['length'];){let I=!0x0;for(let K=D['colIndex']||0x0;K<(D['colIndex']||0x0)+(D['colspan']||0x1);K+=0x1){const P=n[H]['cells'][K];if(!P||(P['meta']?.['vertMerge']||0x0)!==0x1){I=!0x1;break;}}if(!I)break;for(let Q=D['colIndex']||0x0;Q<(D['colIndex']||0x0)+(D['colspan']||0x1);Q+=0x1)n[H]['cells'][Q]['hidden']=!0x0;D['rowspan']=(D['rowspan']||0x1)+0x1,H+=0x1;}}}}}function Kl(m){const cT=bw;return{'type':'paragraph','id':m['id'],'styleId':m[cT(0x14d)],'styleName':m['styleName'],'paraState':m['paraState'],'inlines':m['inlines'],'text':m['text']};}function lc(n){const cU=bw,o=[];let p={'cells':[]},r=[];for(const y of n)if(r['push'](y),y['terminator']===z['cellMark']&&(p['cells']['push']({'id':M(cU(0x1ac)),'paragraphs':r['map'](Kl),'meta':null}),r=[],y['paraState']['tableRowEnd']||y['paraState']['innerTableRowEnd'])){const B=Bd(y['tableState']);for(;B['length']&&p[cU(0x18a)]['length']>B[cU(0x184)]&&p['cells'][p['cells'][cU(0x184)]-0x1]['paragraphs']['every'](F=>!F['text']&&!(F['inlines']||[])['length']);)p['cells'][cU(0x1d5)]();p['cells'][cU(0x1c8)]((F,H)=>{F['meta']=B[H]||{'index':H};});const D=B['length']?(B[B[cU(0x184)]-0x1]['rightBoundary']||0x0)-(B[0x0]['leftBoundary']||0x0):0x0;o['push']({'id':M('row'),'cells':p['cells'],'state':y['tableState'],'gridWidthTwips':D}),p={'cells':[]};}r['length']&&p['cells']['push']({'id':M(cU(0x1ac)),'paragraphs':r[cU(0x1af)](Kl),'meta':null}),p[cU(0x18a)]['length']&&o['push']({'id':M('row'),'cells':p[cU(0x18a)],'state':n[0x0]?.[cU(0x13c)]||Il([]),'gridWidthTwips':0x0}),_d(o);const s=o[cU(0xe1)](F=>F['gridWidthTwips'])?.[cU(0xe7)]||0x0,x=Math[cU(0x12d)](...n['map'](F=>xl(F['paraState'])),0x1);return{'type':'table','id':M('table'),'depth':x,'rows':o,'state':o[0x0]?.[cU(0x110)]||Il([]),'gridWidthTwips':s};}function Zc(n){const cV=bw,o=[];let p=0x0;for(;p<n['length'];){const r=n[p];if(xl(r['paraState'])<=0x0){o[cV(0x1b2)](Kl(r)),p+=0x1;continue;}const s=[];for(;p<n['length']&&xl(n[p][cV(0x175)])>0x0;)s[cV(0x1b2)](n[p]),p+=0x1;o['push'](lc(s));}return o;}function dc(o,r={}){const cW=bw,x=[],y=jZ(o,r);x['push'](...y['warnings']||[]);const P=y['getStream'](cW(0x115));if(!P)throw new Error('Missing\x20WordDocument\x20stream');const T=dd(P);if(T['base']['wIdent']!==0xa5ec&&Xl(x,'Unexpected\x20FIB\x20identifier:\x200x'+T['base']['wIdent'][cW(0x101)](0x10)),T[cW(0x1ba)]['fEncrypted'])throw new Error('Encrypted\x20.doc\x20files\x20are\x20not\x20supported\x20yet');const U=y['getStream'](T['base']['fWhichTblStm']?'/1Table':'/0Table');if(!U)throw new Error(cW(0xf4));const a0=y['getStream'](cW(0x1b5))||new Uint8Array(0x0),a1=rZ(U,T['fibRgFcLcb']),a2=DZ(P,a1),a3=a2['join'](''),a4=T[cW(0x104)]['ccpText']>0x0?T['fibRgLw']['ccpText']:a3['length'],a5=vd(U,T['fibRgFcLcb']),a6=Jd(U,T['fibRgFcLcb']),a7=pd(P,U,T,a1)['filter'](ak=>ak[cW(0x11b)]<a4),a8=yd(P,U,T,a1)['filter'](ak=>ak['cpStart']<a4)[cW(0x1af)](ak=>({...ak,'cpEnd':Math['min'](ak['cpEnd'],a4)})),a9=a8['length']?a8['map'](ak=>({'cpStart':ak['cpStart'],'cpEnd':ak[cW(0x146)],'terminator':a3[ak['cpEnd']-0x1]||'','styleId':ak['styleId'],'properties':ak['properties']})):qZ(a3['slice'](0x0,a4))['map'](ak=>({...ak,'styleId':0x0,'properties':[]})),aa=Td(y),ab=[],ae=new Set(),af=fd(a0,aa,ab,ae,new Map(),r),ag={'index':0x0},ah=a9['map'](ak=>{const cX=cW,am=AZ(P,a1,a2,ak[cX(0x11b)],ak['cpEnd']),an=ak['terminator']===z['paragraph']||ak['terminator']===z['cellMark']?ak['terminator']:'',ao=an&&am['endsWith'](an)?am['slice'](0x0,-0x1):am;return $d({...ak,'terminator':an},ao,a5,a6,a7,af,ag);}),ai=Zc(ah),aj=Array['from'](aa['values']())['filter'](ak=>ak?.['attachment']&&!ae['has'](ak['entry'][cW(0x134)]))['map'](ak=>ak['attachment']);for(const ak of aj)ab['push'](ak);return aj['length']&&ai['push']({'type':'attachments','id':M('attachments'),'items':aj}),{'kind':'msdoc','version':0x1,'warnings':x,'meta':{'fib':{'wIdent':T[cW(0x1ba)]['wIdent'],'nFib':T[cW(0x1ba)]['nFib'],'fWhichTblStm':T['base']['fWhichTblStm'],'fComplex':T['base']['fComplex'],'fEncrypted':T['base']['fEncrypted'],'ccpText':T[cW(0x104)]['ccpText']},'counts':{'paragraphs':ah['length'],'blocks':ai['length'],'assets':ab['length'],'styles':a5['styles']['size'],'fonts':a6['fonts'][cW(0x184)]}},'fonts':a6[cW(0x17f)],'styles':Array['from'](a5['styles']['values']())['map'](am=>({'istd':am['istd'],'name':am[cW(0x134)],'type':am['stdfBase']?.['stk'],'basedOn':am['stdfBase']?.[cW(0x218)],'next':am[cW(0xf3)]?.['istdNext']})),'blocks':ai,'assets':ab};}const cl={0x1:'#000000',0x2:'#0000ff',0x3:'#00ffff',0x4:bw(0x1d0),0x5:'#ff00ff',0x6:'#ff0000',0x7:bw(0x13b),0x8:'#ffffff',0x9:'#000080',0xa:bw(0x102),0xb:'#008000',0xc:bw(0x161),0xd:bw(0x138),0xe:'#808000',0xf:'#808080',0x10:'#c0c0c0'};function bl(m){const cY=bw;return Object[cY(0x10b)](m)['filter'](([,n])=>n!=null&&n!=='')['map'](([n,o])=>n+':'+o)['join'](';');}function g(n){const d0=bw;if(!n)return null;const o=Math['max'](0x1,Math[d0(0x20c)]((n['lineWidth']??0x8)/0x8*1.3333)),p=n['borderType'],r=p===0x6?'double':p===0x3?d0(0xe6):p===0x2?'dashed':'solid',s=n[d0(0x17e)],x=s&&cl[s]||'#666';return o+d0(0x10c)+r+'\x20'+x;}function cc(n){const d1=bw,o={'text-align':ed(n['alignment'])},p=v(n['spacingBefore']),r=v(n['spacingAfter']),s=v(n['leftIndent']),x=v(n['rightIndent']),y=v(n[d1(0x14a)]);if(p&&(o[d1(0x1f0)]=p+'px'),r&&(o['margin-bottom']=r+'px'),s&&(o['margin-left']=s+'px'),x&&(o[d1(0x1ce)]=x+'px'),y&&(o['text-indent']=y+'px'),n['lineSpacing']){const I=Math['abs'](n['lineSpacing'])/0xf0;I&&(o['line-height']=String(Math['max'](0x1,I)));}n['keepLines']&&(o['break-inside']=d1(0x150)),n['keepNext']&&(o['break-after']=d1(0x150)),n['pageBreakBefore']&&(o['break-before']='page'),n['rtlPara']&&(o[d1(0xf6)]=d1(0x1e9));const B=g(n['borders']?.['top']),D=g(n['borders']?.['right']),F=g(n[d1(0x209)]?.['bottom']),H=g(n[d1(0x209)]?.['left']);return B&&(o['border-top']=B),D&&(o['border-right']=D),F&&(o['border-bottom']=F),H&&(o['border-left']=H),o;}function bc(m){const d2=bw,n=kd(m);if(!m||n==='none')return{};const o={'text-decoration-line':'underline'};return n==='double'||n===d2(0x10d)?o['text-decoration-style']='double':n['includes']('dot')||n==='dotted-heavy'?o[d2(0x17b)]='dotted':n['includes']('dash')?o[d2(0x17b)]='dashed':n['includes']('wave')||n['includes']('wavy')?o['text-decoration-style']='wavy':o['text-decoration-style']='solid',o;}function cZ(m){const d3=bw,n={};(m['bold']||m['boldBi'])&&(n[d3(0x1c3)]='700'),(m['italic']||m['italicBi'])&&(n['font-style']='italic'),(m['strike']||m[d3(0x191)])&&(n['text-decoration-line']=(n['text-decoration-line']?n['text-decoration-line']+'\x20':'')+'line-through'),Object['assign'](n,bc(m['underline'])),m[d3(0x136)]&&(n[d3(0x1e4)]=m['fontSizeHalfPoints']/0x2+'pt'),m['fontFamily']&&(n['font-family']='\x27'+String(m['fontFamily'])['replace'](/'/g,'\x5c\x27')+'\x27,\x20sans-serif'),m['colorIndex']&&cl[m['colorIndex']]&&(n[d3(0x17e)]=cl[m['colorIndex']]);const o=typeof m['highlight']==d3(0x20b)?m['highlight']:m['highlight']?.['index'];return o&&Sl[o]&&(n['background-color']=Sl[o]),m['smallCaps']&&(n['font-variant-caps']='small-caps'),m['caps']&&(n['text-transform']='uppercase'),m['scale']&&m[d3(0x124)]!==0x64&&(n[d3(0x19d)]='inline-block',n['transform']='scaleX('+m['scale']/0x64+')',n[d3(0x202)]='left\x20center'),m['positionHalfPoints']>0x0&&(n[d3(0x201)]='super'),m['positionHalfPoints']<0x0&&(n['vertical-align']='sub'),m['outline']&&(n['text-shadow']='0\x200\x200.02em\x20currentColor'),(m['shadow']||m['emboss']||m['imprint'])&&(n['text-shadow']=n['text-shadow']?n[d3(0x219)]+',\x200.06em\x200.06em\x200.08em\x20rgba(0,0,0,.25)':'0.06em\x200.06em\x200.08em\x20rgba(0,0,0,.25)'),m[d3(0x1e9)]&&(n[d3(0xf6)]=d3(0x1e9)),n;}function mc(m){const d4=bw,n=j(m[d4(0xed)]),o=cZ(m['style']);o[d4(0x1e1)]='break-spaces';const p=bl(o),r='<span'+(p?'\x20style=\x22'+p+'\x22':'')+'>'+n+d4(0x10a);return m['href']?'<a\x20class=\x22msdoc-link\x22\x20href=\x22'+j(m[d4(0x1a7)])+'\x22\x20target=\x22_blank\x22\x20rel=\x22noreferrer\x20noopener\x22>'+r+'</a>':r;}function ic(m){const d5=bw,n=cZ(m['style']);n['max-width']='100%',n['height']=d5(0x208);const o='<img\x20class=\x22msdoc-image\x22\x20src=\x22'+j(m['asset']['dataUrl'])+'\x22\x20alt=\x22\x22\x20style=\x22'+bl(n)+'\x22>';return m['href']?'<a\x20class=\x22msdoc-link\x22\x20href=\x22'+j(m[d5(0x1a7)])+'\x22\x20target=\x22_blank\x22\x20rel=\x22noreferrer\x20noopener\x22>'+o+'</a>':o;}function Gc(m){const d6=bw,n=j(m['asset']['name']||'embedded-file'),o='<a\x20class=\x22msdoc-attachment\x22\x20href=\x22'+j(m[d6(0x15e)]['dataUrl'])+'\x22\x20download=\x22'+n+'\x22>📎\x20'+n+'</a>';return m[d6(0x1a7)]?'<a\x20class=\x22msdoc-link\x22\x20href=\x22'+j(m[d6(0x1a7)])+'\x22\x20target=\x22_blank\x22\x20rel=\x22noreferrer\x20noopener\x22>'+o+d6(0x207):o;}function Wc(m){const d7=bw;return m[d7(0x1af)](n=>n['type']===d7(0xed)?mc(n):n['type']===d7(0x153)?ic(n):n['type']==='attachment'?Gc(n):n['type']==='lineBreak'?'<br>':n['type']===d7(0x1b0)?d7(0x160):'')['join']('');}function bZ(n,o={}){const d8=bw,p=o['inline']?'div':'p',r=bl(cc(n['paraState'])),s=Wc(n['inlines']||[])||'<br>',x=['msdoc-paragraph'];return n[d8(0xff)]&&x['push']('msdoc-style-'+ql(n['styleName'])),'<'+p+'\x20class=\x22'+x['join']('\x20')+'\x22'+(r?'\x20style=\x22'+r+'\x22':'')+'>'+s+'</'+p+'>';}function Vc(n){const d9=bw,o={},p=n[d9(0x190)]?.['rightBoundary']!=null&&n[d9(0x190)]?.['leftBoundary']!=null?n['meta']['rightBoundary']-n['meta']['leftBoundary']:n['meta']?.['width'],r=v(p);r&&(o['width']=r+'px'),n['meta']?.['noWrap']&&(o['white-space']='nowrap'),n['meta']?.['fitText']&&(o['text-align']='justify'),n[d9(0x190)]?.[d9(0x1ee)]!=null&&(o['vertical-align']=zd(n[d9(0x190)]['vertAlign']));const s=g(n['meta']?.['borders']?.['all']),x=g(n[d9(0x190)]?.['borders']?.['top'])||s,y=g(n[d9(0x190)]?.['borders']?.['right'])||s,B=g(n['meta']?.['borders']?.['bottom'])||s,D=g(n['meta']?.['borders']?.['left'])||s;x&&(o['border-top']=x),y&&(o['border-right']=y),B&&(o['border-bottom']=B),D&&(o['border-left']=D);const F=typeof n['meta']?.['shading']==d9(0x214)&&n['meta']?.[d9(0x20d)]&&d9(0x17e)in n['meta']['shading']?n['meta']['shading']['color']:void 0x0;return F&&cl[F]&&(o['background-color']=cl[F]),o;}function Xc(m){const da=bw,n={},o=v(m['gridWidthTwips']||m['state']?.['tableWidth']?.['wWidth']);o?n[da(0x1c4)]=o+'px':n['width']=da(0x1ad);const p=v(m['state']?.[da(0xe2)]);return p&&(n['margin-left']=p+'px'),n['border-collapse']=da(0x1f8),n[da(0x1bb)]=da(0x16d),n;}function Rc(m){const df=bw,n=m['rows']['map'](o=>{const db=b,p=o['state']?.[db(0x112)]?v(Math['abs'](o[db(0x110)]['rowHeight'])):null,r=p?'\x20style=\x22height:'+p+'px\x22':'',s=o['cells'][db(0x1d9)](x=>!x[db(0x148)])['map'](x=>{const de=db,y=[];(x['colspan']??0x1)>0x1&&y['push']('\x20colspan=\x22'+x['colspan']+'\x22'),(x['rowspan']??0x1)>0x1&&y[de(0x1b2)]('\x20rowspan=\x22'+x['rowspan']+'\x22');const B=bl(Vc(x)),D=x[de(0x171)]['map'](F=>bZ(F,{'inline':!0x0}))[de(0x192)]('');return'<td\x20class=\x22msdoc-cell\x22'+y['join']('')+(B?'\x20style=\x22'+B+'\x22':'')+'>'+(D||'<div\x20class=\x22msdoc-paragraph\x22><br></div>')+de(0x1bf);})['join']('');return'<tr\x20class=\x22msdoc-row\x22'+r+'>'+s+db(0xf7);})['join']('');return'<table\x20class=\x22msdoc-table\x20msdoc-table-depth-'+m[df(0x1a0)]+df(0x1f6)+bl(Xc(m))+'\x22><tbody>'+n+'</tbody></table>';}function uc(m){const dg=bw;return'<section\x20class=\x22msdoc-attachments\x22><div\x20class=\x22msdoc-attachments-title\x22>Embedded\x20attachments</div><ul>'+m['items'][dg(0x1af)](n=>'<li><a\x20class=\x22msdoc-attachment\x22\x20href=\x22'+j(n[dg(0x11d)])+dg(0x13a)+j(n['name']||'embedded-file')+'\x22>📎\x20'+j(n['name']||'embedded-file')+'</a></li>')['join']('')+dg(0x16a);}function mZ(){const dh=bw;return dh(0x1dc);}function hc(m,n={}){const di=bw,o=n[di(0x204)]??mZ();return{'html':m['blocks']['map'](p=>p[di(0x211)]===di(0x176)?bZ(p):p['type']==='table'?Rc(p):p['type']==='attachments'?uc(p):'')[di(0x192)](''),'css':o,'warnings':m['warnings']||[],'meta':m[di(0x190)],'assets':m[di(0x135)]||[],'parsed':m};}async function Ic(m){const dj=bw;if(m instanceof ArrayBuffer)return m;if(ArrayBuffer['isView'](m)){const n=new Uint8Array(m['byteLength']);return n['set'](new Uint8Array(m['buffer'],m['byteOffset'],m['byteLength'])),n['buffer'];}if(typeof Blob<'u'&&m instanceof Blob)return await m['arrayBuffer']();if(typeof m==dj(0x18c)){const o=await fetch(m);if(!o['ok'])throw new Error('Failed\x20to\x20fetch\x20document:\x20'+o['status']);return await o['arrayBuffer']();}throw new TypeError(dj(0x165));}async function sc(m,n={}){const dk=bw,o=await Ic(m);if(n['workerClient'])return n['workerClient']['parseToHtml'](o,{'parseOptions':n['parseOptions']||{},'renderOptions':n['renderOptions']||{}});const p=dc(o,n['parseOptions']||{});return hc(p,n[dk(0x1eb)]||{});}const iZ='<span\x20class=\x22msdoc-page-break\x22></span>',pc='<p\x20class=\x22msdoc-paragraph\x22><br></p>',w={'width':0x31a,'height':0x463},Vl=0.24,Ul=0x3,vl=0.15,yc='\x0a.msdoc-stage{\x0a\x20\x20box-sizing:border-box;\x0a\x20\x20min-height:100%;\x0a\x20\x20padding:32px\x2024px\x2048px;\x0a\x20\x20background:#ececec;\x0a\x20\x20display:flex;\x0a\x20\x20flex-direction:column;\x0a\x20\x20align-items:center;\x0a\x20\x20gap:24px;\x0a}\x0a.msdoc-page{\x0a\x20\x20width:min(100%,794px);\x0a\x20\x20box-sizing:border-box;\x0a}\x0a.msdoc-page\x20>\x20.msdoc-root{\x0a\x20\x20box-sizing:border-box;\x0a\x20\x20width:100%;\x0a\x20\x20max-width:none;\x0a\x20\x20min-height:1123px;\x0a\x20\x20padding:clamp(24px,7%,96px)\x20clamp(20px,6%,88px);\x0a\x20\x20background:#fff;\x0a\x20\x20border:1px\x20solid\x20#d9d9d9;\x0a\x20\x20box-shadow:0\x201px\x203px\x20rgba(0,0,0,0.08),\x200\x2012px\x2032px\x20rgba(0,0,0,0.12);\x0a\x20\x20overflow-wrap:anywhere;\x0a}\x0a/*\x20表格不能沿用正文的\x20anywhere\x20断词,否则旧\x20DOC\x20的列宽和单元格内容会被过度压缩。\x20*/\x0a.msdoc-page\x20.msdoc-table{\x0a\x20\x20display:table;\x0a\x20\x20width:auto;\x0a\x20\x20max-width:100%;\x0a\x20\x20table-layout:auto!important;\x0a\x20\x20border-collapse:collapse;\x0a\x20\x20border-spacing:0;\x0a}\x0a.msdoc-page\x20.msdoc-table\x20tbody,\x0a.msdoc-page\x20.msdoc-table\x20tr{\x0a\x20\x20width:auto;\x0a}\x0a.msdoc-page\x20.msdoc-cell{\x0a\x20\x20min-width:1.5em;\x0a\x20\x20padding:4px\x206px;\x0a\x20\x20vertical-align:top;\x0a\x20\x20word-break:normal;\x0a\x20\x20overflow-wrap:normal;\x0a\x20\x20white-space:normal;\x0a}\x0a.msdoc-page\x20.msdoc-cell\x20.msdoc-paragraph{\x0a\x20\x20margin:0\x200\x204px;\x0a\x20\x20word-break:normal;\x0a\x20\x20overflow-wrap:break-word;\x0a}\x0a.msdoc-page\x20.msdoc-cell\x20.msdoc-paragraph:last-child{\x0a\x20\x20margin-bottom:0;\x0a}\x0a.msdoc-page\x20.msdoc-cell\x20span{\x0a\x20\x20white-space:normal!important;\x0a}\x0a.msdoc-page\x20.msdoc-page-break{\x0a\x20\x20display:none;\x0a}\x0a@media\x20(max-width:\x20860px){\x0a\x20\x20.msdoc-stage{\x0a\x20\x20\x20\x20padding:16px\x2012px\x2024px;\x0a\x20\x20\x20\x20gap:16px;\x0a\x20\x20}\x0a\x20\x20.msdoc-page{\x0a\x20\x20\x20\x20width:100%;\x0a\x20\x20}\x0a\x20\x20.msdoc-page\x20>\x20.msdoc-root{\x0a\x20\x20\x20\x20min-height:auto;\x0a\x20\x20\x20\x20padding:24px\x2020px;\x0a\x20\x20\x20\x20box-shadow:none;\x0a\x20\x20}\x0a}\x0a',ac=bw(0x1f9)+w[bw(0x1c4)]+'px;\x0a\x20\x20max-width:none;\x0a\x20\x20margin:0;\x0a\x20\x20transform-origin:top\x20center;\x0a}\x0a';function nc(m){return m['replace'](/<(p|table|section)([^>]*?)style="([^"]*?\bbreak-before\s*:\s*page;?[^"]*?)"([^>]*)>/gi,n=>''+iZ+n);}function Yc(m){return'<div\x20class=\x22msdoc-stage\x22>'+nc(m)['split'](iZ)['map'](n=>'<section\x20class=\x22msdoc-page\x22><div\x20class=\x22msdoc-root\x22>'+(n||pc)+'</div></section>')['join']('')+'</div>';}function Lc(m){const dm=bw,n=m[dm(0x1c1)](!0x0);return n['classList']['remove']('msdoc-zoom-viewer'),n[dm(0xfb)]('style[data-msdoc-zoom]')['forEach'](o=>o[dm(0xfd)]()),n['querySelectorAll']('.msdoc-stage,\x20.msdoc-page,\x20.msdoc-root')['forEach'](o=>{o['style']['height']='auto',o['style']['maxHeight']='none',o['style']['overflow']='visible',o['style']['transform']='none';}),n['querySelectorAll']('.msdoc-page')[dm(0x1c8)](o=>{const dn=dm;h(o,w,{'heightMode':'min'}),o['style']['position']='relative',o[dn(0xe4)]['width']=e(w['width']),o['style']['maxWidth']=dn(0x20a),o['style']['margin']='0\x20auto\x2018px';const p=o['querySelector']('.msdoc-root');p&&(p['style']['position']='relative',p['style']['top']='auto',p['style']['left']='auto',p['style']['width']=e(w['width']),p['style']['maxWidth']='none',p['style']['minHeight']=e(w['height']),p[dn(0xe4)]['height']='auto',p['style'][dn(0x137)]='none',p['style']['transformOrigin']='top\x20left',p['style']['boxShadow']='none',p['style']['border']='0',p[dn(0xe4)][dn(0x1e0)]='visible');}),n['innerHTML'];}function Jc(){const dp=bw;return c({'selector':dp(0x1f7),'width':w['width'],'height':w[dp(0x19c)],'heightMode':'min'});}function oc(n){const dq=bw,o=Array['from'](n['querySelectorAll']('.msdoc-page'));if(!o['length'])return()=>{};n['classList']['add']('msdoc-zoom-viewer');const p=document['createElement']('style');p['dataset']['msdocZoom']='true',p['textContent']=ac,n[dq(0x194)](p);const r=l();let s=0x0,x=0x1,y=0x1,B=0x1;const D=Q=>Math[dq(0x167)](Ul,Math[dq(0x12d)](Vl,Number(Q['toFixed'](0x2)))),F=()=>{window['cancelAnimationFrame'](s),s=window['requestAnimationFrame'](()=>{let Q=0x1,S=0x1;o['forEach'](T=>{const dr=b,a0=T[dr(0x14b)]('.msdoc-root');if(!a0)return;const a1=a0['offsetWidth']||w['width'],a2=Math[dr(0x12d)](a0['scrollHeight'],a0[dr(0x1c7)],w['height']),a3=Math['max'](n['clientWidth']-0x30,0x78),a4=Math['min'](0x1,Math[dr(0x12d)](Vl,a3/a1)),a5=D(a4*x);Q=a5,S=a4,a0['style']['transform']='translateX(-50%)\x20scale('+a5+')',T[dr(0xe4)][dr(0x1c4)]=Math[dr(0x1fe)](Math['max'](a1*a5,0x78))+'px',T['style']['height']=Math['ceil'](a2*a5)+'px';}),y=Q,B=S,r['emit']();});},H=()=>({'scale':y,'label':Math['round'](y*0x64)+'%','canZoomIn':y<Ul,'canZoomOut':y>Vl,'canReset':x!==0x1,'minScale':Vl,'maxScale':Ul}),K=Q=>(x=Math['min'](0x6,Math['max'](0.2,Number(Q['toFixed'](0x2)))),F(),H());n[dq(0x100)]['viewerZoomProvider']='doc',i(n,{'zoomIn':()=>K(x+vl),'zoomOut':()=>K(x-vl),'resetZoom':()=>K(0x1),'setZoom':Q=>K(Q/Math['max'](B,0.01)),'getState':H,'subscribe':r['subscribe']});const P=new ResizeObserver(F);return P['observe'](n),o['forEach'](Q=>{const S=Q['querySelector']('.msdoc-root');S&&P['observe'](S);}),F(),()=>{const ds=dq;window['cancelAnimationFrame'](s),P['disconnect'](),k(n),p['remove'](),n['classList']['remove'](ds(0x127));};}async function xc(m,n,o){const p=await sc(m,{'renderOptions':{'css':mZ()+'\x0a'+yc}});n['innerHTML']='<style\x20data-msdoc>'+p['css']+'</style>'+Yc(p['html']);const r=oc(n);return o?.['registerExportAdapter']?.({'includeDocumentStyles':!0x1,'printStyle':Jc,'toHtml':()=>Lc(n)}),{'$el':n,'unmount'(){o?.['registerExportAdapter']?.(null),r(),n['innerHTML']='';}};}export{xc as renderDoc,Sc as renderDocx};
|