{"version":3,"sources":["hooks/usePaymentContract.ts","hooks/useSolanaProvider.ts","env.ts","constants.ts","services/apiService.ts","utils.ts","contexts/Waifu.tsx","hooks/useWaifu.ts","components/colors.ts","components/shared/AppHeader.tsx","components/shared/Confetti.tsx","components/shared/KaomojiLoader.tsx","components/shared/NftCounter.tsx","components/main/cropImage.ts","components/main/ImageUploader.tsx","components/main/SoldOut.tsx","components/main/MainHeader.tsx","components/main/MainContent.tsx","components/main/MainFooter.tsx","components/pillow/PillowMockup.tsx","components/pillow/OrderPillow.tsx","components/pillow/OrderSuccess.tsx","components/pillow/OrderError.tsx","img/solana-icon.svg","components/certificate/Certificate.tsx","components/certificate/CertificateHeader.tsx","components/generator/MintForm.tsx","components/generator/GeneratorHeader.tsx","SolanaProviders.tsx","Providers.tsx","GlobalStyle.ts","App.tsx","reportWebVitals.ts","index.tsx"],"names":["usePaymentContract","provider","useSolanaProvider","wallet","useWallet","program","useMemo","anchor","idl","PAYMENT_PROGRAM_ID","fetchState","useCallback","a","getPaymentStoragePdaAddress","paymentProgramPda","account","paymentStorage","fetch","pdaState","extractId","tx","connection","getTransaction","res","logs","extractLogs","meta","logMessages","extractIdFromLogs","payForMintSol","state","console","log","myPda","PublicKey","toBase58","payer","publicKey","beneficiary","systemProgram","SystemProgram","programId","rpc","payForMint","accounts","instructions","transfer","fromPubkey","toPubkey","lamports","payForMintDay","splToken","getAssociatedTokenAddress","PAYMENT_TOKEN_MINT","walletToken","from","beneficiaryDay","tokenProgram","payForMintSpl","dayPayment","confirmTransaction","id","startIndex","findIndex","msg","startsWith","endIndex","slice","find","includes","match","Number","findProgramAddress","Buffer","bytes","utf8","encode","keypair","web3","Keypair","generate","defaultWallet","Wallet","useConnection","anchorWallet","Provider","preflightCommitment","API_URL","process","SHARE_URL","SOLANA_ENV","REACT_APP_STRIPE_PUBLIC_KEY","LAMPORTS_PER_DAY","client","axios","create","baseURL","api","selfie2anime","selfie","fd","FormData","append","post","responseType","data","File","mint","waifu","certificate","name","mintStatus","get","createStripeCheckoutIntent","image","sleep","ms","Promise","resolve","setTimeout","fileToDataUrl","file","reader","FileReader","addEventListener","result","readAsDataURL","srcToFile","src","fileName","mimeType","arrayBuffer","ab","type","htmlToDataUrl","selector","scale","originalPixelRatio","window","devicePixelRatio","e","html2canvas","document","querySelector","allowTaint","canvas","dataUrl","toDataURL","STATE_STORAGE_KEY","WaifuContext","createContext","onUpdateState","onResetState","initialState","JSON","parse","localStorage","getItem","WaifuProvider","children","useState","initialized","setInitialized","waifuState","setWaifuState","persistState","newState","setItem","stringify","undefined","handleResetState","handleUpdateState","replace","waifuDataUrl","selfieDataUrl","all","apiService","message","error","updatedState","useEffect","init","value","useWaifu","useContext","flamingo","whitesmoke","bluegrey","Header","Layout","Title","Typography","isMainnet","AppHeader","FixedHeader","CustomHeader","CustomMenu","className","href","onClick","ButtonWrapper","connected","styled","div","windowHeight","innerHeight","windowWidth","innerWidth","Confetti","exploding","setExploding","explode","Container","force","duration","particleCount","floorWidth","floorHeight","kaomojis","KaomojiLoader","counter","setCounter","kaomoji","setKaomoji","i","interval","setInterval","clearInterval","length","Math","ceil","random","Row","Kaomoji","Dots","repeat","Text","NftCounter","itemsLeft","setItemsLeft","refreshCount","maxCount","count","intervalId","createImage","url","reject","Image","setAttribute","getRadianAngle","degreeValue","PI","getCroppedImg","imageSrc","pixelCrop","rotation","createElement","ctx","getContext","maxSize","max","width","height","safeArea","sqrt","translate","rotate","drawImage","getImageData","putImageData","round","x","y","Dragger","Upload","ImageUploader","disabled","onUploadDone","setDataUrl","showCropper","setShowCropper","crop","setCrop","zoom","setZoom","croppedAreaPixels","setCroppedAreaPixels","handleCropComplete","croppedArea","handleCustomRequest","onSuccess","onError","du","handleCancel","handleSubmit","cropResult","footer","Footer","direction","size","accept","action","multiple","showUploadList","customRequest","CloudUploadOutlined","visible","destroyOnClose","closable","CropperContainer","aspect","showGrid","onCropChange","onCropComplete","onZoomChange","SoldOut","Content","MainHeader","history","useHistory","ready","setReady","soldOut","setSoldOut","handleSelfieUploadDone","push","CustomContent","preview","MainContent","TextBlock","Features","span","target","rel","Certificate","TwitterCircleFilled","GithubFilled","MainFooter","CustomFooter","PillowMockup","PillowBase","PillowImage","OrderPillow","loading","setLoading","handleOrderIntent","checkoutUrl","open","bordered","strong","queryString","location","search","paymentId","orderId","OrderSuccess","flex","OrderError","holder","nameSize","nameLength","Overlay","CertificateBase","hoverable","cover","alt","CertificateImage","String","padStart","CertificateHeader","handlePrintPDF","printPDF","handleReset","tweetUrl","certId","certificateLink","split","reverse","Mint","danger","icon","sol","FilePdfFilled","pdf","jsPdf","orientation","unit","format","pdfWidth","internal","pageSize","getWidth","pdfHeight","getHeight","addImage","save","Date","toISOString","emailRegex","MintForm","Form","useForm","form","setVisible","useWalletModal","resumeMint","setResumeMint","paying","setPaying","minting","setMinting","priceSol","setPriceSol","priceDay","setPriceDay","setDayPayment","certificateParams","setCertificateParams","waitForMint","status","Error","getCertificateFile","params","handleMint","validateFields","email","heap","identify","success","metadataLink","priceLamports","mul","LAMPORTS_PER_SOL","toNumber","fetchPrices","CertificateForm","Item","label","rules","required","placeholder","pattern","MintButtonWrapper","SwitchWrapper","checkedChildren","unCheckedChildren","checked","onChange","CertificateContainer","GeneratorHeader","SolanaProviders","network","endpoint","clusterApiUrl","wallets","getPhantomWallet","getSolflareWallet","getSolletWallet","getSolletExtensionWallet","getSlopeWallet","getLedgerWallet","autoConnect","Providers","GlobalStyle","createGlobalStyle","antIcon","LoadingOutlined","style","fontSize","spin","Wrapper","App","React","Component","fallback","LoaderWrapper","indicator","exact","path","reportWebVitals","onPerfEntry","Function","then","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","render","StrictMode","getElementById"],"mappings":"kQAgBO,SAASA,IACd,IAAMC,EAAWC,cACXC,EAASC,cACTC,EAAUC,mBAAQ,kBAAM,IAAIC,IAAeC,EAAYC,IAAoBR,KAAW,CAACA,IAEvFS,EAAaC,sBAAW,sBAAC,kCAAAC,EAAA,sEACKC,IADL,0CACtBC,EADsB,cAENT,EAAQU,QAAQC,eAAeC,MAAMH,GAF/B,cAEvBI,EAFuB,yBAItBA,GAJsB,2CAK5B,CAACb,EAAQU,QAAQC,iBAEdG,EAAYR,sBAAW,uCAC3B,WAAOS,GAAP,iBAAAR,EAAA,sEACoBX,EAASoB,WAAWC,eAAeF,GADvD,cACQG,EADR,OAEQC,EAAOC,EAAYF,EAAKG,KAAMC,aAFtC,kBAISC,EAAkBJ,IAJ3B,2CAD2B,sDAO3B,CAACvB,EAASoB,aAGNQ,EAAgBlB,sBAAW,sBAAC,kCAAAC,EAAA,sEACZF,IADY,cAC1BoB,EAD0B,gBAEEjB,IAFF,0CAEzBC,EAFyB,KAIhCiB,QAAQC,IAAI,8BAA+B,CACzCC,MAAO,IAAI1B,IAAY2B,UAAUpB,GAAmBqB,WACpDC,MAAOjC,EAAOkC,UAAWF,WACzBG,YAAaR,EAAMQ,YAAYH,WAC/BI,cAAehC,IAAYiC,cAAcC,UAAUN,aARrB,kBAWzB9B,EAAQqC,IAAIC,WAAW,CAC5BC,SAAU,CACRX,MAAO,IAAI1B,IAAY2B,UAAUpB,GACjCsB,MAAOjC,EAAOkC,UACdC,YAAaR,EAAMQ,YACnBC,cAAehC,IAAYiC,cAAcC,WAE3CI,aAAc,CACZtC,IAAYiC,cAAcM,SAAS,CACjCC,WAAY5C,EAAOkC,UACnBW,SAAUlB,EAAMQ,YAChBW,SAAU,QAtBgB,4CA0B/B,CAACvC,EAAYL,EAAQqC,IAAKvC,EAAOkC,YAE9Ba,EAAgBvC,sBAAW,sBAAC,oCAAAC,EAAA,sEACZF,IADY,cAC1BoB,EAD0B,gBAEEjB,IAFF,0CAEzBC,EAFyB,eAINqC,IAAeC,0BACvCD,IACAA,IACA,IAAI5C,IAAY2B,UAAUmB,KAC1BlD,EAAOkC,WACP,GAT8B,eAI1BiB,EAJ0B,OAYhCvB,QAAQC,IAAI,8BAA+B,CACzCC,MAAO,IAAI1B,IAAY2B,UAAUpB,GAAmBqB,WACpDC,MAAOjC,EAAOkC,UAAWF,WACzBoB,KAAMD,EAAYnB,WAClBqB,eAAgB1B,EAAM0B,eAAerB,WACrCsB,aAAcN,IAA0BhB,aAjBV,kBAoBzB9B,EAAQqC,IAAIgB,cAAc,CAC/Bd,SAAU,CACRX,MAAO,IAAI1B,IAAY2B,UAAUpB,GACjCsB,MAAOjC,EAAOkC,UACdkB,KAAMD,EACNE,eAAgB1B,EAAM0B,eACtBC,aAAcN,QA1Bc,4CA6B/B,CAACzC,EAAYL,EAAQqC,IAAKvC,EAAOkC,YAE9BM,EAAahC,sBAAW,uCAC5B,WAAOgD,GAAP,iBAAA/C,EAAA,0DACa+C,EADb,gCACgCT,IADhC,yDACwDrB,IADxD,iCACQT,EADR,eAGQnB,EAASoB,WAAWuC,mBAAmBxC,EAAI,aAHnD,yBAImBD,EAAUC,GAJ7B,eAIQyC,EAJR,yBAMS,CAAEzC,KAAIgB,MAAOjC,EAAOkC,UAAWF,WAAY0B,OANpD,4CAD4B,sDAS5B,CAAC1C,EAAW+B,EAAerB,EAAe5B,EAASoB,WAAYlB,EAAOkC,YAGxE,MAAO,CAAE3B,aAAYiC,cAGvB,SAASlB,EAAYE,GACnB,IAAMmC,EAAanC,EAAYoC,WAAU,SAACC,GAAD,OAASA,EAAIC,WAAJ,kBAA0BxD,IAA1B,eAC5CyD,EAAWvC,EAAYoC,WAAU,SAACC,GAAD,OAASA,IAAG,kBAAgBvD,IAAhB,eAEnD,OAAOkB,EAAYwC,MAAML,EAAYI,GAGvC,SAAStC,EAAkBD,GACzB,IAGA,EAFYA,EAAYyC,MAAK,SAACJ,GAAD,OAASA,EAAIK,SAAS,oBAEvBC,MAHP,sCAGrB,mBAAiBT,GAAjB,gBAEA,OAAOU,OAAOV,G,SAGDhD,I,2EAAf,sBAAAD,EAAA,sEACeL,IAAY2B,UAAUsC,mBACjC,CAACC,EAAOlB,KAAKhD,IAAamE,MAAMC,KAAKC,OAAO,qBAC5C,IAAIrE,IAAY2B,UAAUzB,MAH9B,oF,+1DChIA,6DAIMoE,EAAUC,IAAKC,QAAQC,WACvBC,EAAgB,IAAIC,IAAOL,GAE1B,SAAS3E,IACd,IAAQmB,EAAe8D,cAAf9D,WACFlB,EAASC,cACTgF,EAAe9E,mBAAQ,kBAAMH,GAAU8E,IAAe,CAAC9E,IAS7D,OARiBG,mBACf,kBACE,IAAI+E,IAAShE,EAAY+D,EAAqB,CAC5CE,oBAAqB,gBAEzB,CAACF,EAAc/D,M,4PCdnB,0KAAO,IAAMkE,EAAUC,4CACVC,EAAYD,iCAEZE,EAAaF,eAEb/E,EAAqB+E,+CAErBnC,EAAqBmC,+CAEDA,kdAAYG,4BAEbpB,OAAOiB,O,uaCT1BI,EAAgB,SAAG,GADE,G,0BCE5BC,EAASC,IAAMC,OAAO,CAC1BC,QAAST,MAkDIU,EA/CH,CACJC,aADI,SACSC,GAA8B,OAAD,uHACxCC,EAAK,IAAIC,UACZC,OAAO,SAAUH,EAAQ,cAFkB,SAIvBN,EAAOU,KAAP,gBAA6BH,EAAI,CAAEI,aAAc,SAJ1B,uBAItCC,EAJsC,EAItCA,KACFlF,EAAM,IAAImF,KAAK,CAACD,GAAO,aALiB,kBAOvClF,GAPuC,8CAS1CoF,KAVI,YAoBS,OAAD,6HAThBvF,EASgB,EAThBA,GACAwF,EAQgB,EARhBA,MACAC,EAOgB,EAPhBA,YACAC,EAMgB,EANhBA,MAOMV,EAAK,IAAIC,UACZC,OAAO,KAAMlF,GAChBgF,EAAGE,OAAO,OAAQQ,GAClBV,EAAGE,OAAO,QAASM,EAAO,aAC1BR,EAAGE,OAAO,cAAeO,EAAa,mBALtB,SAOOhB,EAAOU,KAAP,QAAqBH,EAAI,CAAEI,aAAc,SAPhD,uBAORC,EAPQ,EAORA,KAPQ,kBASTA,GATS,+CAWZM,WA/BI,SA+BO3F,GAAmC,OAAD,4HAC1ByE,EAAOmB,IAAP,gBAAoB5F,GAAM,CAAEoF,aAAc,SADhB,uBACzCC,EADyC,EACzCA,KADyC,kBAG1CA,GAH0C,8CAK7CQ,2BApCI,YAoCwG,OAAD,yHAA9EH,EAA8E,EAA9EA,KAAMI,EAAwE,EAAxEA,OACjCd,EAAK,IAAIC,UACZC,OAAO,OAAQQ,GAClBV,EAAGE,OAAO,QAASY,EAAO,aAHqF,SAKxFrB,EAAOU,KAAP,kBAA+BH,EAAI,CAAEI,aAAc,SALqC,uBAKvGC,EALuG,EAKvGA,KALuG,kBAOxGA,GAPwG,+C,kBC3C5G,SAASU,EAAMC,GACpB,OAAO,IAAIC,SAAQ,SAACC,GAAD,OAAaC,WAAWD,EAASF,MAa/C,SAASI,EAAcC,GAC5B,OAAO,IAAIJ,SAAQ,SAACC,GAClB,IAAMI,EAAS,IAAIC,WACnBD,EAAOE,iBACL,QACA,WACEN,EAAQI,EAAOG,WAEjB,GAGFH,EAAOI,cAAcL,MAIlB,SAAeM,EAAtB,sC,4CAAO,WAAyBC,EAAaC,EAAkBC,GAAxD,iBAAAtH,EAAA,sEACaK,MAAM+G,GADnB,cACCzG,EADD,gBAEYA,EAAI4G,cAFhB,cAECC,EAFD,yBAIE,IAAI1B,KAAK,CAAC0B,GAAKH,EAAU,CAAEI,KAAMH,KAJnC,4C,sBAOA,SAAeI,EAAtB,kC,4CAAO,WAA6BC,GAA7B,iCAAA3H,EAAA,sDAA+C4H,EAA/C,+BAAuD,EACtDC,EAAqBC,OAAOC,iBAGlC,IACGD,OAAeC,iBAAmBH,EACnC,MAAOI,IANJ,gBASgBC,IAAYC,SAASC,cAAcR,GAAY,CAAES,YAAY,IAT7E,OASCC,EATD,OAWCC,EAAUD,EAAOE,UAAU,aACjC,IACGT,OAAeC,iBAAmBF,EACnC,MAAOG,IAdJ,yBAkBEM,GAlBF,4C,iCC/BDE,EAAoB,cA4BbC,EAAeC,wBAA6B,CACvDxH,MAAO,GACPyH,cAAe,aACfC,aAAc,eAGVC,EAoFGC,KAAKC,MAAMC,aAAaC,QAAQT,IAAsB,MAlFlDU,EAAkC,SAAC,GAA0B,IAAxBC,EAAuB,EAAvBA,SAChD,EAAsCC,oBAAS,GAA/C,mBAAOC,EAAP,KAAoBC,EAApB,KACA,EAAoCF,mBAAsBP,GAA1D,mBAAOU,EAAP,KAAmBC,EAAnB,KAEMC,EAAe1J,uBAAY,SAAC2J,GAkEpC,IAAoBxI,EAjEhBsI,EAAcE,GAiEExI,EAhELwI,EAiEbV,aAAaW,QACXnB,EACAM,KAAKc,UAAL,2BACK1I,GADL,IAEE8E,WAAO6D,EACPtE,YAAQsE,QArET,IAEGC,EAAmB/J,uBAAY,WACnC0J,EAAa,MACZ,CAACA,IAEEM,EAAoBhK,sBAAW,uCACnC,WAAOmB,GAAP,qCAAAlB,EAAA,yDAAoCgK,EAApC,kCACQN,EADR,eACwBxI,IAET8E,MAHf,gCAIkCY,EAAc8C,EAAS1D,OAJzD,OAII0D,EAASO,aAJb,kCAKaP,EAASO,aALtB,kCAM2B9C,EAAUuC,EAASO,aAAc,YAAa,aANzE,QAMIP,EAAS1D,MANb,mBASM0D,EAASnE,OATf,kCAUmCqB,EAAc8C,EAASnE,QAV1D,eAUImE,EAASQ,cAVb,OAWIT,EAAa,2BAAKF,GAAeG,IAXrC,oBAa0BjD,QAAQ0D,IAAI,CAACC,EAAW9E,aAAaoE,EAASnE,QAASgB,EAAM,OAbvF,2CAaa5F,EAbb,KAcM+I,EAAS1D,MAAQrF,EAdvB,UAeoCiG,EAAcjG,GAflD,QAeM+I,EAASO,aAff,gEAiBMI,IAAQC,MAAM,KAAWD,SAAW,mCACpCP,IAlBN,yCAqBaJ,EAASQ,cArBtB,kCAsB4B/C,EAAUuC,EAASQ,cAAe,aAAc,cAtB5E,QAsBIR,EAASnE,OAtBb,eAyBQgF,EAAeP,EAAUN,EAAH,2BAAmBH,GAAeG,GAE9DD,EAAac,GA3Bf,2DADmC,sDA8BnC,CAAChB,EAAYE,EAAcK,IAc7B,OAXAU,qBAAU,WAAM,4CACd,sBAAAxK,EAAA,sEACQ+J,EAAkBlB,GAD1B,OAEES,GAAe,GAFjB,4CADc,uBAAC,WAAD,wBAMdmB,KAGC,IAGD,cAAChC,EAAahE,SAAd,CACEiG,MAAO,CACLxJ,MAAOqI,EACPZ,cAAeoB,EACfnB,aAAckB,GAJlB,SAOGT,GAAeF,KCxGf,SAASwB,IAGd,OAFiBC,qBAAWnC,GCLvB,I,QAAMoC,EAAW,UACXC,EAAa,UACbC,EAAW,U,sCCOhBC,GAAWC,IAAXD,OACAE,GAAUC,IAAVD,MAEFE,GAAYtG,IAAWzB,WAAW,WAEzB,SAASgI,KACtB,IAAM9L,EAASC,eACPoJ,EAAiB+B,IAAjB/B,aAER,OACE,cAAC0C,GAAD,UACE,cAACC,GAAD,UACE,cAACP,GAAD,UACE,eAACQ,GAAD,WACE,oBAAGC,UAAU,QAAQC,KAAK,IAAIC,QAAS/C,EAAvC,UACE,cAACsC,GAAD,mBACA,cAACA,GAAD,CAAOO,UAAU,WAAjB,mBACA,cAAC,KAAD,CAAShE,KAAK,aACd,cAACyD,GAAD,uCACA,cAACA,GAAD,CAAOO,UAAU,WAAjB,mCAEF,eAACG,GAAD,YACIR,IAAa,qBAAKK,UAAU,WAAf,SAA2B3G,MAC1C,cAAC,KAAD,CAAmB2G,UAAWlM,EAAOsM,UAAY,kBAAoB,uCASnF,I,GAAML,GAAaM,IAAOC,IAAV,wnBAWHlB,EACOA,EAaLA,EACOA,GAUhBU,GAAeO,IAAOC,IAAV,8TASLlB,GASPS,GAAcQ,IAAOC,IAAV,sJAQXH,GAAgBE,IAAOC,IAAV,0KAONlB,G,qBCzGPmB,GAAelE,OAAOmE,YACtBC,GAAcpE,OAAOqE,WAEZ,SAASC,KACtB,MAAkChD,oBAAS,GAA3C,mBAAOiD,EAAP,KAAkBC,EAAlB,KAWA,OATA9B,qBAAU,WAAM,4CACd,sBAAAxK,EAAA,sEACQuG,EAAM,KADd,OAEE+F,GAAa,GAFf,4CADc,uBAAC,WAAD,wBAMdC,KACC,IAEIF,EACL,cAACG,GAAD,UACE,cAAC,KAAD,CACEC,MAAO,GACPC,SAAU,IACVC,cAAe,IACfC,WAAYV,GACZW,YAAab,OAGf,KAGN,I,YAAMQ,GAAYV,IAAOC,IAAV,+MC3BPb,GAAUC,IAAVD,MAEF4B,GAAW,CACf,iBACA,gCACA,uBACA,qCACA,oCACA,6BACA,0CACA,oCACA,yBACA,uBACA,0BAOa,SAASC,GAAT,GAA6C,IAApB1C,EAAmB,EAAnBA,QACtC,EAA8BjB,mBAAS,GAAvC,mBAAO4D,EAAP,KAAgBC,EAAhB,KACA,EAA8B7D,mBAAS0D,GAAS,IAAhD,mBAAOI,EAAP,KAAgBC,EAAhB,KAmBA,OAjBA3C,qBAAU,WACR,IAAI4C,EAAI,EACJC,EAAWC,aAAY,WACzBL,EAAWG,OACV,KAEH,OAAO,WACLG,cAAcF,MAEf,IAEH7C,qBAAU,WAgEZ,IAAqBgD,EA/DbR,EAAU,IAAM,GAClBG,EAAWL,IA8DIU,EA9DiBV,GAASU,OA+DtCC,KAAKC,KAAKD,KAAKE,SAAWH,GAAU,OA7DxC,CAACR,IAGF,eAAC,GAAD,WACE,eAACY,GAAD,WACE,cAACC,GAAD,UACE,cAAC,GAAD,CAAOpC,UAAU,MAAjB,SAAwByB,MAE1B,cAACY,GAAD,UACE,cAAC,GAAD,CAAOrC,UAAU,MAAjB,SAAwB,SAAIsC,OAAOf,EAAU,UAGjD,cAACY,GAAD,UACE,sBAAMnC,UAAU,UAAhB,SAA2BpB,SAMnC,IAAMmC,GAAYV,IAAOC,IAAV,yYAcFlB,EAMAA,GAKP+C,GAAM9B,IAAOC,IAAV,4HAOH8B,GAAU/B,IAAOC,IAAV,sEAKP+B,GAAOhC,IAAOC,IAAV,+CC/FV,IAAQiC,GAAS7C,IAAT6C,KAEO,SAASC,KACtB,IAAQnO,EAAeV,cAAfU,WACR,EAAkCsJ,mBAAS,GAA3C,mBAAO8E,EAAP,KAAkBC,EAAlB,KAgBA,OAdA3D,qBAAU,WAAO,SACA4D,IADD,2EACd,4BAAApO,EAAA,sEACsBF,IADtB,OACQoB,EADR,OAEEiN,EAAajN,EAAMmN,SAAWnN,EAAMoN,OAFtC,4CADc,sBAMd,IAAMC,EAAajB,YAAYc,EAAc,KAG7C,OAFAA,IAEO,WACLb,cAAcgB,MAEf,CAACzO,IAGF,eAACkO,GAAD,CAAMvC,UAAU,SAAhB,oCACyB,uCAAUyC,EAAV,4B,sEC1BvBM,GAAc,SAACC,GAAD,OAClB,IAAIhI,SAAQ,SAACC,EAASgI,GACpB,IAAMpI,EAAQ,IAAIqI,MAClBrI,EAAMU,iBAAiB,QAAQ,kBAAMN,EAAQJ,MAC7CA,EAAMU,iBAAiB,SAAS,SAACsD,GAAD,OAAWoE,EAAOpE,MAClDhE,EAAMsI,aAAa,cAAe,aAClCtI,EAAMc,IAAMqH,MAGhB,SAASI,GAAeC,GACtB,OAAQA,EAAcrB,KAAKsB,GAAM,IAIpB,SAAeC,GAA9B,qC,8CAAe,WACbC,EACAC,GAFa,yCAAAlP,EAAA,6DAGbmP,EAHa,+BAGF,EAHE,SAKOX,GAAYS,GALnB,cAKP3I,EALO,OAMP+B,EAASH,SAASkH,cAAc,UAChCC,EAAMhH,EAAOiH,WAAW,MAExBC,EAAU9B,KAAK+B,IAAIlJ,EAAMmJ,MAAOnJ,EAAMoJ,QACtCC,EAAiBJ,EAAU,EAAK9B,KAAKmC,KAAK,GAA/B,EAIjBvH,EAAOoH,MAAQE,EACftH,EAAOqH,OAASC,EAGhBN,EAAKQ,UAAUF,EAAW,EAAGA,EAAW,GACxCN,EAAKS,OAAOjB,GAAeM,IAC3BE,EAAKQ,WAAWF,EAAW,GAAIA,EAAW,GAG1CN,EAAKU,UAAUzJ,EAAOqJ,EAAW,EAAkB,GAAdrJ,EAAMmJ,MAAaE,EAAW,EAAmB,GAAfrJ,EAAMoJ,QACvE7J,EAAOwJ,EAAKW,aAAa,EAAG,EAAGL,EAAUA,GAG/CtH,EAAOoH,MAAQP,EAAUO,MACzBpH,EAAOqH,OAASR,EAAUQ,OAG1BL,EAAKY,aACHpK,EACA4H,KAAKyC,MAAM,EAAIP,EAAW,EAAkB,GAAdrJ,EAAMmJ,MAAcP,EAAUiB,GAC5D1C,KAAKyC,MAAM,EAAIP,EAAW,EAAmB,GAAfrJ,EAAMoJ,OAAeR,EAAUkB,IAIzD9I,EAAW,aAtCJ,kBAuCN,CAAEgB,QAASD,EAAOE,UAAUjB,GAAWA,aAvCjC,6C,sBCNf,IAAQ+I,GAAYC,KAAZD,QACAnF,GAAgBC,IAAhBD,MAAO8C,GAAS7C,IAAT6C,KAOA,SAASuC,GAAT,GAA4D,IAAnCC,EAAkC,EAAlCA,SAAUC,EAAwB,EAAxBA,aAChD,EAA8BrH,qBAA9B,mBAAOd,EAAP,KAAgBoI,EAAhB,KACA,EAAsCtH,oBAAS,GAA/C,mBAAOuH,EAAP,KAAoBC,EAApB,KACA,EAAwBxH,mBAAS,CAAE+G,EAAG,EAAGC,EAAG,IAA5C,mBAAOS,EAAP,KAAaC,EAAb,KACA,EAAwB1H,mBAAS,GAAjC,mBAAO2H,EAAP,KAAaC,EAAb,KACA,EAAkD5H,mBAAc,MAAhE,mBAAO6H,EAAP,KAA0BC,EAA1B,KAEMC,EAAqBpR,uBAAY,SAACqR,EAAaH,GACnDC,EAAqBD,KACpB,IAEGI,EAAsBtR,sBAAW,uCACrC,+BAAAC,EAAA,6DAAS6G,EAAT,EAASA,KAAT,EAAeyK,UAAf,EAA0BC,QAA1B,SACmB3K,EAAcC,GADjC,OACQ2K,EADR,OAEEd,EAAWc,GACXZ,GAAe,GAHjB,2CADqC,sDAMrC,IAGIa,EAAe1R,uBAAY,WAC/B6Q,GAAe,GACfF,EAAW,MACV,IAEGgB,EAAe3R,sBAAW,sBAAC,8BAAAC,EAAA,6DAC/B4Q,GAAe,GADgB,SAEN5B,GAAc1G,EAAS2I,GAFjB,cAEzBU,EAFyB,gBAGZxK,EAAUwK,EAAWrJ,QAAS,aAAcqJ,EAAWrK,UAH3C,OAGzBT,EAHyB,OAI/B4J,EAAa5J,GACb6J,EAAW,IALoB,2CAM9B,CAACO,EAAmB3I,EAASmI,IAE1BmB,EACJ,cAACC,GAAD,UACE,eAAC,KAAD,CAAOC,UAAU,WAAWC,KAAK,SAAjC,UACE,cAAC,GAAD,CAAMtG,UAAU,SAAhB,4IAIA,gCACE,cAAC,KAAD,CAAQE,QAAS8F,EAAjB,oBACA,cAAC,KAAD,CAAQhK,KAAK,UAAUgE,UAAU,OAAOE,QAAS+F,EAAjD,0BAQR,OACE,qCACE,eAACrB,GAAD,CACEnK,KAAK,SACL8L,OAAO,uBACPC,OAAO,GACPC,UAAU,EACVC,gBAAgB,EAChBC,cAAef,EACfb,SAAUA,EAPZ,UASE,mBAAG/E,UAAU,uBAAb,SACE,cAAC4G,GAAA,EAAD,MAEF,cAAC,GAAD,CAAO5G,UAAU,WAAjB,sCACA,cAAC,GAAD,mCACA,cAACwC,GAAD,IACA,uBACA,uBACA,2EAEF,cAAC,KAAD,CAAOqE,QAAS3B,EAAa4B,gBAAc,EAACC,UAAU,EAAO/C,MAAO,IAAKmC,OAAQA,EAAjF,SACE,cAACa,GAAD,UACE,cAAC,KAAD,CACEnM,MAAOgC,EACPuI,KAAMA,EACNE,KAAMA,EACN2B,OAAQ,EACRC,UAAQ,EACRC,aAAc9B,EACd+B,eAAgB1B,EAChB2B,aAAc9B,WAQ1B,I,GAAMyB,GAAmB3G,IAAOC,IAAV,wFAMhB8F,GAAS/F,IAAOC,IAAV,6LC5GJiC,GAAgB7C,IAAhB6C,KAAM9C,GAAUC,IAAVD,MAEC,SAAS6H,KACtB,OACE,eAAC,GAAD,WACE,eAAC,GAAD,CAAOtH,UAAU,MAAjB,sCACQ,IADR,SACc,IADd,+BAGA,cAAC,GAAD,CAAMA,UAAU,OAAhB,0BAKN,I,GAAMe,GAAYV,IAAOC,IAAV,uRASFlB,GChBLmI,GAAY/H,IAAZ+H,QAEO,SAASC,KACtB,IAAMC,EAAUC,cACRxK,EAAkBgC,IAAlBhC,cACA7I,EAAeV,cAAfU,WACR,EAA0BsJ,oBAAS,GAAnC,mBAAOgK,EAAP,KAAcC,EAAd,KACA,EAA8BjK,oBAAS,GAAvC,mBAAOkK,EAAP,KAAgBC,EAAhB,KAEMC,EAAyBzT,sBAAW,uCACxC,WAAOwF,GAAP,SAAAvF,EAAA,sDACE2I,EACE,CACEpD,WAEF,GAEF2N,EAAQO,KAAK,SAPf,2CADwC,sDAUxC,CAACP,EAASvK,IAeZ,OAZA6B,qBAAU,WAAM,4CACd,4BAAAxK,EAAA,sEACsBF,IADtB,OACQoB,EADR,OAEEmS,GAAS,GACLnS,EAAMoN,OAASpN,EAAMmN,UACvBkF,GAAW,GAJf,4CADc,uBAAC,WAAD,wBASd9I,KACC,CAAC3K,IAGF,eAAC,IAAD,WACE,cAACuL,GAAD,IACA,cAACqI,GAAD,UACE,cAACV,GAAD,UACE,qBAAKvH,UAAU,eAAexI,GAAG,YAAjC,SACE,sBAAKwI,UAAU,cAAf,UACE,sBAAKA,UAAU,mBAAf,UACE,qBAAKA,UAAU,SAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,gCAE1C,qBAAKqE,UAAU,QAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,iCAG5C,sBAAKqE,UAAU,mBAAf,UACE,qBAAKA,UAAU,SAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,gCAE1C,qBAAKqE,UAAU,QAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,iCAG5C,sBAAKqE,UAAU,mBAAf,UACE,qBAAKA,UAAU,SAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,gCAE1C,qBAAKqE,UAAU,QAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,iCAG5C,sBAAKqE,UAAU,mBAAf,UACE,qBAAKA,UAAU,SAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,gCAE1C,qBAAKqE,UAAU,QAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,iCAG5C,sBAAKqE,UAAU,mBAAf,UACE,qBAAKA,UAAU,SAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,gCAE1C,qBAAKqE,UAAU,QAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,iCAG5C,sBAAKqE,UAAU,mBAAf,UACE,qBAAKA,UAAU,SAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,gCAE1C,qBAAKqE,UAAU,QAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,iCAG5C,sBAAKqE,UAAU,mBAAf,UACE,qBAAKA,UAAU,SAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,gCAE1C,qBAAKqE,UAAU,QAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,iCAG5C,sBAAKqE,UAAU,mBAAf,UACE,qBAAKA,UAAU,SAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,gCAE1C,qBAAKqE,UAAU,QAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,iCAG5C,sBAAKqE,UAAU,mBAAf,UACE,qBAAKA,UAAU,SAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,gCAE1C,qBAAKqE,UAAU,QAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,iCAG5C,sBAAKqE,UAAU,mBAAf,UACE,qBAAKA,UAAU,SAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,iCAE1C,qBAAKqE,UAAU,QAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,kCAG5C,qBAAKqE,UAAU,mBAAf,SACG6H,EAAU,cAACP,GAAD,IAAc,cAACxC,GAAD,CAAeC,UAAW4C,EAAO3C,aAAc+C,MAE1E,sBAAK/H,UAAU,mBAAf,UACE,qBAAKA,UAAU,SAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,iCAE1C,qBAAKqE,UAAU,QAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,kCAG5C,sBAAKqE,UAAU,mBAAf,UACE,qBAAKA,UAAU,SAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,iCAE1C,qBAAKqE,UAAU,QAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,kCAG5C,sBAAKqE,UAAU,mBAAf,UACE,qBAAKA,UAAU,SAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,iCAE1C,qBAAKqE,UAAU,QAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,kCAG5C,sBAAKqE,UAAU,mBAAf,UACE,qBAAKA,UAAU,SAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,iCAE1C,qBAAKqE,UAAU,QAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,kCAG5C,sBAAKqE,UAAU,mBAAf,UACE,qBAAKA,UAAU,SAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,iCAE1C,qBAAKqE,UAAU,QAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,kCAG5C,sBAAKqE,UAAU,mBAAf,UACE,qBAAKA,UAAU,SAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,iCAE1C,qBAAKqE,UAAU,QAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,kCAG5C,sBAAKqE,UAAU,mBAAf,UACE,qBAAKA,UAAU,SAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,iCAE1C,qBAAKqE,UAAU,QAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,kCAG5C,sBAAKqE,UAAU,mBAAf,UACE,qBAAKA,UAAU,SAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,iCAE1C,qBAAKqE,UAAU,QAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,kCAG5C,sBAAKqE,UAAU,mBAAf,UACE,qBAAKA,UAAU,SAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,iCAE1C,qBAAKqE,UAAU,QAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,kCAG5C,sBAAKqE,UAAU,mBAAf,UACE,qBAAKA,UAAU,SAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,iCAE1C,qBAAKqE,UAAU,QAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,kCAG5C,sBAAKqE,UAAU,mBAAf,UACE,qBAAKA,UAAU,SAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,iCAE1C,qBAAKqE,UAAU,QAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,kCAG5C,sBAAKqE,UAAU,mBAAf,UACE,qBAAKA,UAAU,SAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,iCAE1C,qBAAKqE,UAAU,QAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,kCAG5C,sBAAKqE,UAAU,mBAAf,UACE,qBAAKA,UAAU,SAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,iCAE1C,qBAAKqE,UAAU,QAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,kCAG5C,sBAAKqE,UAAU,mBAAf,UACE,qBAAKA,UAAU,SAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,iCAE1C,qBAAKqE,UAAU,QAAf,SACE,cAAC,IAAD,CAAOgE,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,8CAW1D,I,YAAMsM,GAAgB5H,IAAOC,IAAV,ixBAMNlB,G,kDChQLmI,GAAY/H,IAAZ+H,QACA9H,GAAgBC,IAAhBD,MAAO8C,GAAS7C,IAAT6C,KAEA,SAAS4F,KACtB,OACE,cAAC,IAAD,UACE,cAAC,GAAD,UACE,eAAC,GAAD,WACE,eAACC,GAAD,WACE,sBAAKpI,UAAU,OAAf,UACE,cAAC,GAAD,CAAMA,UAAU,aAAhB,gFACA,cAAC,GAAD,CAAOA,UAAU,WAAWxI,GAAG,UAA/B,gCAIF,eAAC,GAAD,CAAMwI,UAAU,SAAhB,mCACwB,uBADxB,yFAKF,eAACqI,GAAD,WACE,eAAC,KAAD,WACE,eAAC,KAAD,CAAKC,KAAM,EAAX,UACE,cAAC,GAAD,CAAOtI,UAAU,mBAAjB,sCACA,cAAC,GAAD,CAAOA,UAAU,gBAAjB,2BACA,cAAC,IAAD,CAAOkI,SAAS,EAAOvM,IAAK,8BAC5B,cAAC,GAAD,CAAMqE,UAAU,SAAhB,uEAEF,eAAC,KAAD,CAAKsI,KAAM,EAAX,UACE,cAAC,GAAD,CAAOtI,UAAU,mBAAjB,qDACA,cAAC,GAAD,CAAOA,UAAU,gBAAjB,sBACA,cAAC,IAAD,CAAOkI,SAAS,EAAOvM,IAAK,4BAC5B,cAAC,GAAD,CAAMqE,UAAU,SAAhB,yEACA,sBAAKA,UAAU,SAAf,UACE,cAAC,GAAD,CAAMA,UAAU,SAAhB,wBACA,mBAAGC,KAAK,sBAAsBsI,OAAO,SAASC,IAAI,aAAlD,SACE,cAAC,IAAD,CAAON,SAAS,EAAOvM,IAAK,mCAIlC,eAAC,KAAD,CAAK2M,KAAM,EAAX,UACE,cAAC,GAAD,CAAOtI,UAAU,mBAAjB,+CACA,cAAC,GAAD,CAAOA,UAAU,gBAAjB,0BACA,cAAC,IAAD,CAAOkI,SAAS,EAAOvM,IAAK,sBAC5B,cAAC,GAAD,CAAMqE,UAAU,SAAhB,mFAGJ,uBACA,cAAC,KAAD,CAAQC,KAAK,aAAaqG,KAAK,QAA/B,oCAIF,eAAC8B,GAAD,WACE,sBAAKpI,UAAU,OAAf,UACE,cAAC,GAAD,CAAMA,UAAU,aAAhB,wDACA,cAAC,GAAD,CAAOA,UAAU,WAAWxI,GAAG,UAA/B,4BAIF,cAAC,GAAD,CAAMwI,UAAU,SAAhB,0GAIF,cAACyI,GAAD,UACE,cAAC,KAAD,UACE,cAAC,IAAD,CAAOP,SAAS,EAAOvM,IAAK,0BAGhC,uBACA,cAAC,KAAD,CAAQsE,KAAK,aAAaqG,KAAK,QAA/B,iCAGA,eAAC8B,GAAD,WACE,sBAAKpI,UAAU,OAAf,UACE,cAAC,GAAD,CAAMA,UAAU,aAAhB,oEACA,cAAC,GAAD,CAAOA,UAAU,WAAWxI,GAAG,UAA/B,6BAIF,cAAC,GAAD,CAAMwI,UAAU,SAAhB,kFAEF,uBACA,mBAAGC,KAAK,qCAAqCsI,OAAO,SAASC,IAAI,aAAjE,SACE,cAACE,GAAA,EAAD,CAAqB1I,UAAU,iBAEjC,mBAAGC,KAAK,iCAAiCsI,OAAO,SAASC,IAAI,aAA7D,SACE,cAACG,GAAA,EAAD,CAAc3I,UAAU,wBAQpC,I,GAAMiI,GAAgB5H,IAAOC,IAAV,ixBAUNlB,EAqBAA,EAIAA,EACOA,GASdiJ,GAAWhI,IAAOC,IAAV,6bAIEjB,EAWHD,GAgBPgJ,GAAY/H,IAAOC,IAAV,sDAITmI,GAAcpI,IAAOC,IAAV,kGChLT8F,GAAW5G,IAAX4G,OACA7D,GAAS7C,IAAT6C,KAEO,SAASqG,KACtB,OACE,cAAC,IAAD,UACE,cAACC,GAAD,UACE,eAAC,GAAD,WACE,cAAC,KAAD,IACA,cAAC,GAAD,CAAM7M,KAAK,YAAX,8DAOV,I,SAAM6M,GAAexI,IAAOC,IAAV,iLCdH,SAASwI,KACtB,IAAQrT,EAAUyJ,IAAVzJ,MAER,OACE,eAAC,GAAD,WACE,cAACsT,GAAD,UACE,cAAC,IAAD,CAAO/E,MAAO,IAAKkE,SAAS,EAAOvM,IAAK,6BAE1C,cAACqN,GAAD,UACE,cAAC,IAAD,CAAOhF,MAAO,IAAKkE,SAAS,EAAOvM,IAAKlG,EAAM+I,cAAgB/I,EAAMgJ,qBAM5E,I,GAAMsC,GAAYV,IAAOC,IAAV,wFAMTyI,GAAa1I,IAAOC,IAAV,4EAMV0I,GAAc3I,IAAOC,IAAV,sOCvBTb,GAAgBC,IAAhBD,MAAO8C,GAAS7C,IAAT6C,KAEA,SAAS0G,KACtB,IAAQxT,EAAUyJ,IAAVzJ,MACR,EAA8BkI,oBAAS,GAAvC,mBAAOuL,EAAP,KAAgBC,EAAhB,KACMC,EAAoB9U,sBAAW,sBAAC,8BAAAC,EAAA,6DACpC4U,GAAW,GADyB,kBAGJxK,EAAW/D,2BAA2B,CAClEH,KAAMhF,EAAMgF,MAAQ,QACpBI,MAAOpF,EAAM8E,QALmB,gBAG1B8O,EAH0B,EAG1BA,YAKRhN,OAAOiN,KAAKD,EAAa,UARS,gDAUlCzK,IAAQC,MAAM,wBAVoB,yBAYlCsK,GAAW,GAZuB,4EAcnC,CAAC1T,IAEJ,OACE,cAAC,GAAD,UACE,cAAC,KAAD,CAAM8T,UAAU,EAAhB,SACE,eAAC,KAAD,CAAOlD,UAAU,WAAWC,KAAK,SAAStG,UAAU,QAApD,UACE,gCACE,cAAC,GAAD,CAAOA,UAAU,mBAAjB,+CACA,cAAC,GAAD,CAAOA,UAAU,gBAAjB,6BAEF,cAAC8I,GAAD,IACA,cAAC,GAAD,CAAM9I,UAAU,SAAhB,wKAIA,cAAC,GAAD,CAAMwJ,QAAM,EAACxJ,UAAU,SAAvB,yDAGA,cAAC,KAAD,CAAQsG,KAAK,QAAQ4C,QAASA,EAAShJ,QAASkJ,EAAhD,4CASV,I,GAAMrI,GAAYV,IAAOC,IAAV,kbAeFlB,EAIAA,EACOA,G,qBCnEZmI,GAAY/H,IAAZ+H,QACA9H,GAAgBC,IAAhBD,MAAO8C,GAAS7C,IAAT6C,KAEf,GAA+BkH,KAAYnM,MAAMjB,OAAOqN,SAASC,QAAzDC,GAAR,GAAQA,UAAWC,GAAnB,GAAmBA,QAEJ,SAASC,KACtB,OACE,eAAC,IAAD,WACE,cAACnJ,GAAD,IACA,cAACf,GAAD,IACA,cAAC,GAAD,UACE,eAAC,GAAD,WACE,eAAC,KAAD,CAAKI,UAAU,YAAf,UACE,cAAC,GAAD,CAAOA,UAAU,WAAjB,6CACA,cAAC,GAAD,0DAEF,cAAC,KAAD,UACE,cAAC,KAAD,CAAK+J,KAAK,OAAO/J,UAAU,6BAA3B,SACE,cAAC8I,GAAD,QAGJ,cAAC,KAAD,UACE,eAAC,KAAD,CAAKiB,KAAK,OAAO/J,UAAU,0BAA3B,UACE,eAAC,GAAD,WACE,iDADF,IAC2B4J,MAE3B,eAAC,GAAD,WACE,+CADF,IACyBC,WAI7B,cAAC,KAAD,UACE,cAAC,KAAD,CAAKE,KAAK,OAAO/J,UAAU,kBAA3B,SACE,cAAC,GAAD,+DASd,I,GAAMiI,GAAgB5H,IAAOC,IAAV,0oBACHjB,EAaHD,GCzDLmI,GAAY/H,IAAZ+H,QACA9H,GAAgBC,IAAhBD,MAAO8C,GAAS7C,IAAT6C,KAEA,SAASyH,KACtB,OACE,eAAC,IAAD,WACE,cAACpK,GAAD,IACA,cAAC,GAAD,UACE,eAAC,GAAD,WACE,eAAC,KAAD,CAAKI,UAAU,YAAf,UACE,eAAC,GAAD,CAAOA,UAAU,WAAjB,sCACQ,IADR,SACc,IADd,+BAGA,cAAC,GAAD,iEAEF,cAAC,KAAD,UACE,cAAC,KAAD,CAAK+J,KAAK,OAAO/J,UAAU,aAA3B,SACE,cAAC,GAAD,oCAGJ,cAAC,KAAD,UACE,cAAC,KAAD,CAAK+J,KAAK,OAAO/J,UAAU,6BAA3B,SACE,cAAC8I,GAAD,QAGJ,cAAC,KAAD,UACE,cAAC,KAAD,CAAKiB,KAAK,OAAO/J,UAAU,kBAA3B,SACE,cAAC,GAAD,+DASd,I,YAAMiI,GAAgB5H,IAAOC,IAAV,6gBACHjB,EAcHD,G,oEC1DE,OAA0B,wCCMjCK,GAAgBC,IAAhBD,MAAO8C,GAAS7C,IAAT6C,KAUA,SAASkG,GAAT,GAA6E,IAAtDzI,EAAqD,EAArDA,UAAWxB,EAA0C,EAA1CA,aAAc/D,EAA4B,EAA5BA,KAAMjD,EAAsB,EAAtBA,GAAIyS,EAAkB,EAAlBA,OACjEC,EAAWjW,mBAAQ,WACvB,IAAMkW,GAAc1P,GAAQ,IAAIsH,QAAU,EAC1C,OAAIoI,GAAc,EACT,KACEA,GAAc,GAChB,IACEA,GAAc,GAChB,IACEA,GAAc,GAChB,IAEA,OAER,CAAC1P,IAEJ,OACE,eAAC2P,GAAD,CAAS5S,GAAG,cAAcwI,UAAWA,EAArC,UACE,cAACqK,GAAD,UACE,cAAC,KAAD,CAAMC,WAAS,EAACC,MAAO,qBAAKtG,OAAO,MAAMuG,IAAI,cAAc7O,IAAK,gCAElE,cAAC8O,GAAD,UACE,cAAC,IAAD,CAAOzG,MAAO,IAAKkE,SAAS,EAAOvM,IAAK6C,MAE1C,cAAC,GAAD,UACE,cAAC,KAAD,CAAKwB,UAAU,OAAf,SACE,cAAC,KAAD,CAAK+J,KAAK,QAAV,SACE,eAAC,KAAD,CAAO1D,UAAU,WAAWrG,UAAU,QAAtC,UACE,cAAC,GAAD,CAAOA,UAAU,UAAjB,qCACA,cAAC,GAAD,CAAMA,UAAU,aAAhB,wDACA,cAAC,GAAD,CAAMwJ,QAAM,EAACxJ,UAAU,SAAvB,0FAGA,cAAC,GAAD,CAAMA,UAAS,oBAAekK,GAA9B,SAA2CzP,IAC3C,cAAC,GAAD,CAAM+O,QAAM,EAACxJ,UAAU,SAAvB,8FAGA,eAAC,GAAD,CAAMA,UAAU,eAAhB,UACE,+CADF,IAC8B0K,OAAOlT,GAAImT,SAAS,EAAG,QAErD,eAAC,GAAD,CAAM3K,UAAU,SAAhB,UACE,6CADF,IAC4BiK,iBAU1C,I,MAAMG,GAAU/J,IAAOC,IAAV,iGAOP+J,GAAkBhK,IAAOC,IAAV,uNAefmK,GAAmBpK,IAAOC,IAAV,gJAQhB8H,GAAY/H,IAAOC,IAAV,owBAiBFlB,EAoBAE,GCtHLiI,GAAY/H,IAAZ+H,QACA9H,GAAUC,IAAVD,MAEO,SAASmL,KACtB,IAAMnD,EAAUC,cAChB,EAAgCxI,IAAxBzJ,EAAR,EAAQA,MAAO0H,EAAf,EAAeA,aAET0N,EAAiBvW,sBAAW,sBAAC,sBAAAC,EAAA,sEACX0H,EAAc,eAAgB,GADnB,OAEjC6O,GAFiC,mDAGhC,IAEGC,EAAczW,sBAAW,sBAAC,sBAAAC,EAAA,sDAC9B4I,IACAsK,EAAQO,KAAK,KAFiB,2CAG7B,CAACP,EAAStK,IAEP6N,EAAW/W,mBAAQ,WAAO,IAAD,EACvBgX,EAAM,UAAGxV,EAAMyV,uBAAT,aAAG,EAAuBC,MAAM,KAAKC,UAAU,GAC3D,MAAM,kFAAN,OAAyFhS,IAAzF,cAAwG6R,KACvG,CAACxV,EAAMyV,kBAEV,OACE,eAAC,IAAD,WACE,cAACvK,GAAD,IACA,cAACf,GAAD,IACA,cAAC,GAAD,CAAepI,GAAG,SAAlB,SACE,eAAC,GAAD,WACE,eAAC,KAAD,CAAKwI,UAAU,YAAf,UACE,cAAC,GAAD,CAAOA,UAAU,WAAjB,qDACA,cAAC,GAAD,yDAEF,eAAC,KAAD,CAAKA,UAAU,OAAf,UACE,eAAC,KAAD,CAAK+J,KAAK,QAAV,UACE,cAAC,GAAD,CAAaE,OAAQxU,EAAMwU,OAAQzS,GAAI/B,EAAM+B,GAAIiD,KAAMhF,EAAMgF,KAAM+D,aAAc/I,EAAM+I,eACvF,uBACA,uBACA,cAAC6M,GAAD,UACE,eAAC,KAAD,CAAOhF,UAAU,WAAWC,KAAK,SAAjC,UACE,qBAAKtG,UAAU,UAAf,SACE,eAAC,KAAD,CAAOqG,UAAU,aAAaC,KAAK,QAAnC,UACE,cAAC,KAAD,CAAQgF,QAAM,EAAChF,KAAK,QAAQrG,KAAM+K,EAAUzC,OAAO,SAASC,IAAI,aAAhE,uBAGA,cAAC,KAAD,CAAQxM,KAAK,UAAUsK,KAAK,QAAQgF,QAAM,EAACpL,QAAS6K,EAApD,gCAKJ,qBAAK/K,UAAU,UAAf,SACE,eAAC,KAAD,CAAOqG,UAAU,aAAaC,KAAK,QAAnC,UACE,cAAC,KAAD,CACEtK,KAAK,OACLsP,QAAM,EACNC,KAAM,qBAAKvH,MAAM,OAAOhE,UAAU,UAAUrE,IAAK6P,GAAKhB,IAAI,QAC1DvK,KAAI,yCAAoCxK,EAAMV,GAA1C,oBAAwDsE,KAC5DkP,OAAO,SACPC,IAAI,qBANN,qCAUA,cAAC,KAAD,CAAQhR,GAAG,QAAQ0I,QAAS2K,EAAgB7O,KAAK,OAAOsP,QAAM,EAACC,KAAM,cAACE,GAAA,EAAD,IAArE,uCAQV,cAAC,KAAD,CAAK1B,KAAK,OAAV,SACE,cAACd,GAAD,iBASd,SAAS6B,GAASjO,GAChB,IAAM6O,EAAM,IAAIC,KAAM,CACpBC,YAAa,YACbC,KAAM,KACNC,OAAQ,CAAC,KAAM,OAEXC,EAAWL,EAAIM,SAASC,SAASC,WACjCC,EAAYT,EAAIM,SAASC,SAASG,YACxCV,EAAIW,SAASxP,EAAS,OAAQ,EAAG,EAAGkP,EAAUI,GAC9CT,EAAIY,KAAJ,mCAAoC,IAAIC,MAAOC,cAA/C,SAGF,I,eAAMnB,GAAOhL,IAAOC,IAAV,mTAKclB,GAalB6I,GAAgB5H,IAAOC,IAAV,kgCACHjB,EAUID,EAePA,EAMAA,EAMAE,EAQAF,EAUAE,GClKLG,GAAgBC,IAAhBD,MAAO8C,GAAS7C,IAAT6C,KAQTkK,GACJ,yHAGa,SAASC,KACtB,IAAMjF,EAAUC,cAChB,EAAeiF,KAAKC,UAAbC,EAAP,oBACA,EAA+C3N,IAAvCzJ,EAAR,EAAQA,MAAOyH,EAAf,EAAeA,cAAeC,EAA9B,EAA8BA,aAC9B,EAAiCpJ,eAAzBiC,EAAR,EAAQA,UAAWoK,EAAnB,EAAmBA,UACX0M,EAAeC,eAAfD,WACR,EAAmCnZ,cAA3B2C,EAAR,EAAQA,WAAYjC,EAApB,EAAoBA,WACpB,EAAoCsJ,oBAAS,GAA7C,mBAAOqP,EAAP,KAAmBC,EAAnB,KACA,EAA4BtP,oBAAS,GAArC,mBAAOuP,EAAP,KAAeC,EAAf,KACA,EAA8BxP,oBAAS,GAAvC,mBAAOyP,EAAP,KAAgBC,EAAhB,KACA,EAAgC1P,mBAAS,GAAzC,mBAAO2P,EAAP,KAAiBC,EAAjB,KACA,EAAgC5P,mBAAS,GAAzC,mBAAO6P,EAAP,KAAiBC,EAAjB,KACA,EAAoC9P,oBAAS,GAA7C,mBAAOrG,EAAP,KAAmBoW,EAAnB,KACA,EAAkD/P,mBAA6B,IAA/E,oBAAOgQ,GAAP,MAA0BC,GAA1B,MAEMC,GAAcvZ,sBAAW,uCAAC,WAAOS,GAAP,SAAAR,EAAA,+EACvB,IAAIyG,QAAJ,uCAAY,WAAOC,EAASgI,GAAhB,eAAA1O,EAAA,sFAGPuG,EAAM,KAHC,uBAIK6D,EAAWjE,WAAW3F,GAJ3B,UAKM,YADbG,EAJO,QAKL4Y,OALK,0CAMJ7S,EAAQ/F,IANJ,WAOa,UAAfA,EAAI4Y,OAPF,0CAQJ7K,EAAO,IAAI8K,MAAM7Y,EAAI0J,WARjB,iFAYfqE,EAAO,EAAD,IAZS,0DAAZ,0DADuB,2CAAD,sDAgB5B,IAEG+K,GAAqB1Z,sBAAW,uCAAC,WAAO2Z,GAAP,eAAA1Z,EAAA,6DACrCqZ,GAAqBK,GADgB,SAE/BnT,EAAM,KAFyB,uBAGfmB,EAAc,gBAHC,cAG/BY,EAH+B,yBAK9BnB,EAAUmB,EAAS,kBAAmB,cALR,2CAAD,sDAMnC,IAEGqR,GAAa5Z,sBAAW,sBAAC,4CAAAC,EAAA,sEACCsY,EAAKsB,iBADN,mBACrB1T,EADqB,EACrBA,KAAM2T,EADe,EACfA,MAEThO,EAHwB,uBAI3B6M,GAAc,GAJa,kBAKpBH,GAAW,IALS,OAQ7B,IACGzQ,OAAegS,KAAKC,SAASF,GAC9B,MAAO7R,GACP7G,QAAQmJ,MAAMtC,GAXa,gBAe3B4Q,GAAU,GAfiB,UAgBK7W,EAAWgB,GAhBhB,wBAgBnBvC,EAhBmB,EAgBnBA,GAAIgB,EAhBe,EAgBfA,MAAOyB,EAhBQ,EAgBRA,GACnBoH,IAAQ2P,QAAQ,uBAChBlB,GAAW,GAlBgB,UAmBDW,GAAmB,CAAExW,KAAIiD,OAAMwP,OAAQlU,IAnBtC,eAmBrByE,EAnBqB,iBAoBrBmE,EAAWrE,KAAK,CAAEvF,KAAIwF,MAAO9E,EAAM8E,MAAQC,cAAaC,SApBnC,yBAqBToT,GAAY9Y,GArBH,QAqBrBG,EArBqB,OAuB3BgI,EAAc,CACZ1F,GAAItC,EAAIsC,GACRzC,GAAIG,EAAIH,GACRyZ,aAActZ,EAAIsZ,aAClBtD,gBAAiBhW,EAAIgW,gBACrBzQ,OACAwP,OAAM,OAAEjU,QAAF,IAAEA,OAAF,EAAEA,EAAWF,aAGrB8I,IAAQ2P,QAAQ,+BAChB9G,EAAQO,KAAK,gBAjCc,kDAmC3BpJ,IAAQC,MAAM,KAAWD,SAnCE,yBAqC3BuO,GAAU,GACVE,GAAW,GAtCgB,6EAwC5B,CACDjN,EACA9I,EACAuV,EACAmB,GACAvG,EACAvK,EACA5G,EACAN,EACA8W,EACArX,EAAM8E,MACNsT,KAGF9O,qBAAU,WACJqB,GAAa4M,IACfC,GAAc,GACdiB,QAED,CAAC9N,EAAW8N,GAAYlB,IAE3B,IAAMjC,GAAczW,uBAAY,WAC9B6I,IACAsK,EAAQO,KAAK,OACZ,CAACP,EAAStK,IAYb,OAVA4B,qBAAU,WAAM,4CACd,4BAAAxK,EAAA,sEACsBF,IADtB,OACQoB,EADR,OAEE8X,EAAY9X,EAAMgZ,cAAcC,IAAI,IAAIxa,KAAU,MAAMoM,IAAI,IAAIpM,KAAUya,sBAAmBC,WAAa,KAC1GnB,EAAYhY,EAAM+X,SAASkB,IAAI,IAAIxa,KAAU,MAAMoM,IAAI,IAAIpM,KAAUqF,IAAmBqV,WAAa,KAHvG,4CADc,uBAAC,WAAD,wBAOdC,KACC,CAACxa,IAGF,eAAC,KAAD,CAAMwY,KAAMA,EAAZ,UACGO,GAAW,cAAC9L,GAAD,CAAe1C,QAAQ,sDACnC,cAACkQ,GAAD,UACE,cAAC,KAAD,CAAMxE,WAAS,EAAf,SACE,eAAC,KAAD,CAAKtK,UAAU,OAAf,UACE,cAAC,KAAD,UACE,cAAC,GAAD,UACE,cAAC,KAAD,CAAMA,UAAU,YAAhB,SACE,eAAC,KAAD,CAAOqG,UAAU,WAAWC,KAAK,QAAjC,UACE,cAAC,IAAD,CAAOtC,MAAO,IAAKkE,SAAS,EAAOvM,IAAKlG,EAAM+I,cAAgB/I,EAAMgJ,gBACpE,cAAC,KAAD,CAAQzC,KAAK,OAAOsP,QAAM,EAACpL,QAAS6K,GAApC,uCAOR,cAAC,KAAD,UACE,eAAC,KAAD,CAAO1E,UAAU,WAAjB,UACE,cAAC,GAAD,CAAOrG,UAAU,UAAjB,qCACA,cAAC,GAAD,CAAMA,UAAU,aAAhB,wDACA,cAAC,GAAD,CAAMwJ,QAAM,EAACxJ,UAAU,SAAvB,0FAGA,cAAC,KAAK+O,KAAN,CACEtU,KAAK,OACLuU,MAAM,GACNC,MAAO,CACL,CACEC,UAAU,EACVtQ,QAAS,oCAEX,CACEmF,IAzJE,GA0JFnF,QAAQ,uBAAD,OA1JL,GA0JK,sBAVb,SAcE,cAAC,KAAD,CAAO0H,KAAK,QAAQ6I,YAAY,wBAAmBpK,SAAUqI,GAAWF,MAE1E,cAAC,GAAD,CAAM1D,QAAM,EAACxJ,UAAU,SAAvB,8FAGA,cAAC,KAAK+O,KAAN,CACEtU,KAAK,QACLuU,MAAM,GACNC,MAAO,CACL,CACEC,UAAU,EACVtQ,QAAS,6BAEX,CACEwQ,QAAS3C,GACT7N,QAAS,+BAVf,SAcE,cAAC,KAAD,CAAO0H,KAAK,QAAQtK,KAAK,QAAQmT,YAAY,aAAapK,SAAUqI,GAAWF,MAEjF,cAAC,GAAD,CAAMlN,UAAU,SAAhB,yDAMV,cAACqP,GAAD,UACE,eAAC,KAAD,CAAOhJ,UAAU,WAAWC,KAAK,SAAjC,UACE,qBAAKtG,UAAU,SAAf,SACE,eAAC,KAAD,CAAOqG,UAAU,aAAaC,KAAK,QAAnC,UACE,cAAC,IAAD,CAAOtG,UAAU,UAAUiE,OAAQ,GAAIiE,SAAS,EAAOvM,IAAK,+BAC5D,cAAC2T,GAAD,UACE,cAAC,KAAD,CACEC,gBAAe,cAASjC,EAAT,QACfkC,kBAAiB,cAAShC,EAAT,QACjBiC,SAAUnY,EACVoY,SAAU,SAACD,GAAD,OAAa/B,GAAe+B,aAK9C,cAAC,KAAD,CAAQzT,KAAK,UAAUsK,KAAK,QAAQgF,QAAM,EAACpC,QAASkE,GAAWF,EAAQhN,QAASgO,GAAhF,gCAGA,cAAC1L,GAAD,SAGJ,cAACmN,GAAD,UACE,cAAC,GAAD,CACE3P,UAAU,cACVxI,GAAImW,GAAkBnW,GACtBiD,KAAMkT,GAAkBlT,KACxBwP,OAAQ0D,GAAkB1D,OAC1BzL,aAAc/I,EAAM+I,oBAO9B,I,GAAMsQ,GAAkBzO,IAAOC,IAAV,qDAIfgP,GAAgBjP,IAAOC,IAAV,mDAIbmK,GAAmBpK,IAAOC,IAAV,gKAWhB+O,GAAoBhP,IAAOC,IAAV,oTAKClB,GAalBuQ,GAAuBtP,IAAOC,IAAV,iNCpRlBiH,GAAY/H,IAAZ+H,QACA9H,GAAUC,IAAVD,MAEO,SAASmQ,KACtB,IAAQna,EAAUyJ,IAAVzJ,MACFyT,IAAYzT,EAAMgJ,gBAAkBhJ,EAAM+I,aAEhD,OACE,eAAC,IAAD,WACE,cAACoB,GAAD,IACCsJ,GAAW,cAAC5H,GAAD,CAAe1C,QAAQ,iCACnC,cAAC,GAAD,CAAepH,GAAG,SAAlB,SACE,eAAC,GAAD,WACE,eAAC,KAAD,CAAKwI,UAAU,YAAf,WACIkJ,GACA,qCACE,cAAC,GAAD,CAAOlJ,UAAU,WAAjB,qDACA,cAAC,GAAD,iDAGHkJ,GACC,qCACE,cAAC,GAAD,CAAOlJ,UAAU,WAAjB,sCACA,cAAC,GAAD,qDAIN,eAAC,KAAD,CAAKA,UAAWkJ,EAAU,YAAc,OAAxC,UACE,cAAC,KAAD,CAAKa,KAAK,QAAV,SACE,cAAC2C,GAAD,MAEF,cAAC,KAAD,CAAK3C,KAAK,OAAV,SACE,cAACd,GAAD,iBASd,I,GAAMhB,GAAgB5H,IAAOC,IAAV,07BACHjB,EAUID,EAWPA,EAMAA,EAaAA,G,UCvEE,SAASyQ,GAAT,GAAgD,IAArBnS,EAAoB,EAApBA,SAClCoS,EAAU7b,mBAAQ,kBAAMoF,MAAY,IACpC0W,EAAW9b,mBAAQ,kBAAM+b,yBAAcF,KAAU,CAACA,IAIlDG,EAAUhc,mBACd,iBAAM,CACJic,eACAC,eACAC,aAAgB,CAAEN,YAClBO,aAAyB,CAAEP,YAC3BQ,eAIAC,kBAEF,CAACT,IAGH,OACE,cAAC,KAAD,CAAoBC,SAAUA,EAA9B,SACE,cAAC,KAAD,CAAgBE,QAASA,EAASO,aAAW,EAA7C,SACE,cAAC,KAAD,UAAsB9S,QCnCf,SAAS+S,GAAT,GAA0C,IAArB/S,EAAoB,EAApBA,SAClC,OACE,cAACmS,GAAD,UACE,cAAC,EAAD,UAAgBnS,MCRtB,I,GAyDegT,GAzDA,CACbpQ,IAAKqQ,KAGoBrQ,IAAV,ivCAUelB,EAkBnBA,EAGOA,EAIPA,EAIKA,EACEA,EAQPA,EACOA,GC3CdwR,GAAU,cAACC,EAAA,EAAD,CAAiBC,MAAO,CAAEC,SAAU,IAAMC,MAAI,IAExDC,G,4JACJ,WACE,OACE,eAACR,GAAD,WACE,cAAC,GAAD,IACA,cAAC,IAAD,UACE,cAACS,GAAD,a,GANYC,IAAMC,WAa5B,SAASF,KACP,OACE,cAAC,WAAD,CACEG,SACE,cAACC,GAAD,UACE,cAAC,IAAD,CAAMC,UAAWX,OAHvB,SAOE,eAAC,IAAD,WACE,cAAC,IAAD,CAAOY,OAAK,EAACC,KAAK,gBAAlB,SACE,cAAC3H,GAAD,MAEF,cAAC,IAAD,CAAO0H,OAAK,EAACC,KAAK,cAAlB,SACE,cAACzH,GAAD,MAEF,eAAC,IAAD,CAAOwH,OAAK,EAACC,KAAK,eAAlB,UACE,cAAC7G,GAAD,IACA,cAACzC,GAAD,IACA,cAACS,GAAD,OAEF,eAAC,IAAD,CAAO4I,OAAK,EAACC,KAAK,QAAlB,UACE,cAAC7B,GAAD,IACA,cAACzH,GAAD,IACA,cAACS,GAAD,OAEF,eAAC,IAAD,CAAO6I,KAAK,IAAZ,UACE,cAACjK,GAAD,IACA,cAACW,GAAD,IACA,cAACS,GAAD,YAOV,IAAM0I,GAAgBjR,IAAOC,IAAV,iJAQJ2Q,MC3DAS,GAZS,SAACC,GACnBA,GAAeA,aAAuBC,UACxC,8BAAqBC,MAAK,YAAkD,IAA/CC,EAA8C,EAA9CA,OAAQC,EAAsC,EAAtCA,OAAQC,EAA8B,EAA9BA,OAAQC,EAAsB,EAAtBA,OAAQC,EAAc,EAAdA,QAC3DJ,EAAOH,GACPI,EAAOJ,GACPK,EAAOL,GACPM,EAAON,GACPO,EAAQP,OCJdQ,IAASC,OACP,cAAC,IAAMC,WAAP,UACE,cAAC,GAAD,MAEF5V,SAAS6V,eAAe,SAM1BZ,O","file":"static/js/main.4f4fe4c0.chunk.js","sourcesContent":["import { useCallback, useMemo } from 'react';\nimport * as anchor from '@project-serum/anchor';\nimport { useWallet } from '@solana/wallet-adapter-react';\nimport * as splToken from '@solana/spl-token';\n\nimport idl from '../idl/deep_waifu_payment_contract.json';\nimport { PAYMENT_PROGRAM_ID, PAYMENT_TOKEN_MINT } from '../env';\nimport { useSolanaProvider } from './useSolanaProvider';\nimport { IPaymentPda } from '../types';\n\ninterface IPaymentResult {\n tx: string;\n payer: string;\n id: number;\n}\n\nexport function usePaymentContract() {\n const provider = useSolanaProvider();\n const wallet = useWallet();\n const program = useMemo(() => new anchor.Program(idl as any, PAYMENT_PROGRAM_ID, provider), [provider]);\n\n const fetchState = useCallback(async (): Promise => {\n const [paymentProgramPda] = await getPaymentStoragePdaAddress();\n const pdaState = await program.account.paymentStorage.fetch(paymentProgramPda);\n\n return pdaState as any;\n }, [program.account.paymentStorage]);\n\n const extractId = useCallback(\n async (tx: string): Promise => {\n const res = await provider.connection.getTransaction(tx);\n const logs = extractLogs(res!.meta!.logMessages!);\n\n return extractIdFromLogs(logs);\n },\n [provider.connection]\n );\n\n const payForMintSol = useCallback(async (): Promise => {\n const state = await fetchState();\n const [paymentProgramPda] = await getPaymentStoragePdaAddress();\n\n console.log('initializing SOL payment...', {\n myPda: new anchor.web3.PublicKey(paymentProgramPda).toBase58(),\n payer: wallet.publicKey!.toBase58(),\n beneficiary: state.beneficiary.toBase58(),\n systemProgram: anchor.web3.SystemProgram.programId.toBase58(),\n });\n\n return program.rpc.payForMint({\n accounts: {\n myPda: new anchor.web3.PublicKey(paymentProgramPda),\n payer: wallet.publicKey,\n beneficiary: state.beneficiary,\n systemProgram: anchor.web3.SystemProgram.programId,\n },\n instructions: [\n anchor.web3.SystemProgram.transfer({\n fromPubkey: wallet.publicKey!,\n toPubkey: state.beneficiary,\n lamports: 0,\n }),\n ],\n });\n }, [fetchState, program.rpc, wallet.publicKey]);\n\n const payForMintDay = useCallback(async (): Promise => {\n const state = await fetchState();\n const [paymentProgramPda] = await getPaymentStoragePdaAddress();\n\n const walletToken = await splToken.Token.getAssociatedTokenAddress(\n splToken.ASSOCIATED_TOKEN_PROGRAM_ID,\n splToken.TOKEN_PROGRAM_ID,\n new anchor.web3.PublicKey(PAYMENT_TOKEN_MINT),\n wallet.publicKey!,\n false\n );\n\n console.log('initializing DAY payment...', {\n myPda: new anchor.web3.PublicKey(paymentProgramPda).toBase58(),\n payer: wallet.publicKey!.toBase58(),\n from: walletToken.toBase58(),\n beneficiaryDay: state.beneficiaryDay.toBase58(),\n tokenProgram: splToken.TOKEN_PROGRAM_ID.toBase58(),\n });\n\n return program.rpc.payForMintSpl({\n accounts: {\n myPda: new anchor.web3.PublicKey(paymentProgramPda),\n payer: wallet.publicKey,\n from: walletToken,\n beneficiaryDay: state.beneficiaryDay,\n tokenProgram: splToken.TOKEN_PROGRAM_ID,\n },\n });\n }, [fetchState, program.rpc, wallet.publicKey]);\n\n const payForMint = useCallback(\n async (dayPayment: boolean): Promise => {\n const tx = dayPayment ? await payForMintDay() : await payForMintSol();\n\n await provider.connection.confirmTransaction(tx, 'finalized');\n const id = await extractId(tx);\n\n return { tx, payer: wallet.publicKey!.toBase58(), id };\n },\n [extractId, payForMintDay, payForMintSol, provider.connection, wallet.publicKey]\n );\n\n return { fetchState, payForMint };\n}\n\nfunction extractLogs(logMessages: string[]): string[] {\n const startIndex = logMessages.findIndex((msg) => msg.startsWith(`Program ${PAYMENT_PROGRAM_ID} invoke`));\n const endIndex = logMessages.findIndex((msg) => msg === `Program ${PAYMENT_PROGRAM_ID} success`);\n\n return logMessages.slice(startIndex, endIndex);\n}\n\nfunction extractIdFromLogs(logMessages: string[]): number {\n const paymentRegex = /\\[([A-Za-z0-9]{44}):([0-9]{1,4})\\]/;\n const msg = logMessages.find((msg) => msg.includes('Paid for mint'));\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const [_, payer, id] = msg!.match(paymentRegex)!;\n\n return Number(id);\n}\n\nasync function getPaymentStoragePdaAddress() {\n return await anchor.web3.PublicKey.findProgramAddress(\n [Buffer.from(anchor.utils.bytes.utf8.encode('payment-storage'))],\n new anchor.web3.PublicKey(PAYMENT_PROGRAM_ID)\n );\n}\n","import { Wallet, web3, Provider } from '@project-serum/anchor';\nimport { useMemo } from 'react';\nimport { useConnection, useWallet } from '@solana/wallet-adapter-react';\n\nconst keypair = web3.Keypair.generate();\nconst defaultWallet = new Wallet(keypair);\n\nexport function useSolanaProvider() {\n const { connection } = useConnection();\n const wallet = useWallet();\n const anchorWallet = useMemo(() => wallet || defaultWallet, [wallet]);\n const provider = useMemo(\n () =>\n new Provider(connection, anchorWallet as any, {\n preflightCommitment: 'confirmed',\n }),\n [anchorWallet, connection]\n );\n\n return provider;\n}\n","import { WalletAdapterNetwork } from '@solana/wallet-adapter-base';\n\nexport const API_URL = process.env.REACT_APP_API_URL as string;\nexport const SHARE_URL = process.env.REACT_APP_SHARE_URL as string;\n\nexport const SOLANA_ENV = process.env.REACT_APP_SOLANA_ENV as WalletAdapterNetwork;\n\nexport const PAYMENT_PROGRAM_ID = process.env.REACT_APP_PAYMENT_PROGRAM_ID as string;\n\nexport const PAYMENT_TOKEN_MINT = process.env.REACT_APP_PAYMENT_TOKEN_MINT as string;\n\nexport const STRIPE_PUBLIC_KEY = process.env.REACT_APP_STRIPE_PUBLIC_KEY as string;\n\nexport const PILLOW_PRICE_USD = Number(process.env.REACT_APP_PILLOW_PRICE_USD);\n","export const SECOND_MILLIS = 1000;\nexport const MINUTE_MILLIS = 60 * SECOND_MILLIS;\n\nexport const DAY_TOKEN_DECIMALS = 8;\nexport const LAMPORTS_PER_DAY = 10 ** DAY_TOKEN_DECIMALS;\n","import axios from 'axios';\n\nimport { API_URL } from '../env';\nimport { IMintStatus, IStripeCheckoutIntent } from '../types';\n\nconst client = axios.create({\n baseURL: API_URL,\n});\n\nconst api = {\n async selfie2anime(selfie: File): Promise {\n const fd = new FormData();\n fd.append('selfie', selfie, 'selfie.jpg');\n\n const { data } = await client.post(`/selfie2anime`, fd, { responseType: 'blob' });\n const res = new File([data], 'waifu.png');\n\n return res;\n },\n async mint({\n tx,\n waifu,\n certificate,\n name,\n }: {\n tx: string;\n waifu: File;\n certificate: File;\n name: string;\n }): Promise {\n const fd = new FormData();\n fd.append('tx', tx);\n fd.append('name', name);\n fd.append('waifu', waifu, 'waifu.png');\n fd.append('certificate', certificate, 'certificate.png');\n\n const { data } = await client.post(`/mint`, fd, { responseType: 'json' });\n\n return data;\n },\n async mintStatus(tx: string): Promise {\n const { data } = await client.get(`/mint/${tx}`, { responseType: 'json' });\n\n return data;\n },\n async createStripeCheckoutIntent({ name, image }: { name: string; image: File }): Promise {\n const fd = new FormData();\n fd.append('name', name);\n fd.append('image', image, 'image.png');\n\n const { data } = await client.post(`/checkoutIntent`, fd, { responseType: 'json' });\n\n return data;\n },\n};\n\nexport default api;\n","import html2canvas from 'html2canvas';\n\nexport function sleep(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport function isTruthy(value: string): boolean {\n // eslint-disable-next-line eqeqeq\n return value === 'true' || value == '1';\n}\n\nexport function shortAddress(address?: string | null | undefined, chars = 4): string {\n const addr = (address || '').toUpperCase();\n return `0x${addr.substr(2, chars)}...${addr.substr(-chars)}`;\n}\n\nexport function fileToDataUrl(file: File): Promise {\n return new Promise((resolve) => {\n const reader = new FileReader();\n reader.addEventListener(\n 'load',\n function () {\n resolve(reader.result as any);\n },\n false\n );\n\n reader.readAsDataURL(file);\n });\n}\n\nexport async function srcToFile(src: string, fileName: string, mimeType: string) {\n const res = await fetch(src);\n const ab = await res.arrayBuffer();\n\n return new File([ab], fileName, { type: mimeType });\n}\n\nexport async function htmlToDataUrl(selector: string, scale = 1): Promise {\n const originalPixelRatio = window.devicePixelRatio;\n // weird hack for retina displays images coming out 2x too big but seems to work\n // also works for generally scaling the images up/down\n try {\n (window as any).devicePixelRatio = scale;\n } catch (e) {\n //\n }\n const canvas = await html2canvas(document.querySelector(selector)!, { allowTaint: true });\n\n const dataUrl = canvas.toDataURL('image/png');\n try {\n (window as any).devicePixelRatio = originalPixelRatio;\n } catch (e) {\n //\n }\n\n return dataUrl;\n}\n","import React, { createContext, useCallback, useEffect, useState } from 'react';\nimport { message } from 'antd';\n\nimport { SECOND_MILLIS } from '../constants';\nimport { apiService } from '../services';\nimport { fileToDataUrl, sleep, srcToFile } from '../utils';\n\nconst STATE_STORAGE_KEY = 'waifu-state';\n\nexport interface IWaifuSerializableState {\n name: string;\n id: number;\n holder: string;\n tx: string;\n selfieDataUrl: string;\n waifuDataUrl: string;\n metadataLink: string;\n certificateLink: string;\n}\n\nexport interface IWaifuState extends IWaifuSerializableState {\n selfie: File | undefined;\n waifu: File | undefined;\n}\n\nexport interface IWaifuContext {\n state: IWaifuState;\n onUpdateState: (state: Partial, replace?: boolean) => void;\n onResetState: () => void;\n}\n\ninterface IProps {\n children: React.ReactNode;\n}\n\nexport const WaifuContext = createContext({\n state: {} as any,\n onUpdateState: () => {},\n onResetState: () => {},\n});\n\nconst initialState = readState();\n\nexport const WaifuProvider: React.FC = ({ children }: IProps) => {\n const [initialized, setInitialized] = useState(false);\n const [waifuState, setWaifuState] = useState(initialState as any);\n\n const persistState = useCallback((newState: IWaifuState) => {\n setWaifuState(newState);\n storeState(newState);\n }, []);\n\n const handleResetState = useCallback(() => {\n persistState({} as any);\n }, [persistState]);\n\n const handleUpdateState = useCallback(\n async (state: Partial, replace = false) => {\n const newState = { ...state };\n\n if (newState.waifu) {\n newState.waifuDataUrl = await fileToDataUrl(newState.waifu);\n } else if (newState.waifuDataUrl) {\n newState.waifu = await srcToFile(newState.waifuDataUrl, 'waifu.png', 'image/png');\n }\n\n if (newState.selfie) {\n newState.selfieDataUrl = await fileToDataUrl(newState.selfie);\n persistState({ ...waifuState, ...newState });\n try {\n const [res] = await Promise.all([apiService.selfie2anime(newState.selfie), sleep(3 * SECOND_MILLIS)]);\n newState.waifu = res;\n newState.waifuDataUrl = await fileToDataUrl(res);\n } catch (e) {\n message.error((e as any).message || 'Unknown error. Please try again');\n handleResetState();\n throw e;\n }\n } else if (newState.selfieDataUrl) {\n newState.selfie = await srcToFile(newState.selfieDataUrl, 'selfie.jpg', 'image/jpeg');\n }\n\n const updatedState = replace ? newState : { ...waifuState, ...newState };\n\n persistState(updatedState as IWaifuState);\n },\n [waifuState, persistState, handleResetState]\n );\n\n useEffect(() => {\n async function init() {\n await handleUpdateState(initialState as IWaifuState);\n setInitialized(true);\n }\n\n init();\n // only run this once so skip any dependencies\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n \n {initialized && children}\n \n );\n};\n\nfunction storeState(state: IWaifuState) {\n localStorage.setItem(\n STATE_STORAGE_KEY,\n JSON.stringify({\n ...state,\n waifu: undefined,\n selfie: undefined,\n })\n );\n}\n\nfunction readState(): IWaifuSerializableState {\n return JSON.parse(localStorage.getItem(STATE_STORAGE_KEY) || '{}');\n}\n","import { useContext } from 'react';\n\nimport { WaifuContext } from '../contexts';\n\nexport function useWaifu() {\n const waifuCtx = useContext(WaifuContext);\n\n return waifuCtx;\n}\n","export const flamingo = '#ff4d4f';\nexport const whitesmoke = '#F5F5F5';\nexport const bluegrey = '#37474f';\n","import styled from 'styled-components';\nimport { Typography, Layout, Divider } from 'antd';\nimport { WalletMultiButton } from '@solana/wallet-adapter-react-ui';\nimport { useWallet } from '@solana/wallet-adapter-react';\n\nimport { useWaifu } from '../../hooks';\nimport { SOLANA_ENV } from '../../env';\nimport { flamingo } from '../colors';\n\nconst { Header } = Layout;\nconst { Title } = Typography;\n\nconst isMainnet = SOLANA_ENV.startsWith('mainnet');\n\nexport default function AppHeader() {\n const wallet = useWallet();\n const { onResetState } = useWaifu();\n\n return (\n \n \n
\n \n \n Deep\n Waifu\n \n ディープ\n ワイフ\n \n \n {!isMainnet &&
{SOLANA_ENV}
}\n \n
\n
\n
\n
\n
\n );\n}\n\nconst CustomMenu = styled.div`\n display: flex;\n padding-top: 1.2em;\n justify-content: space-between;\n\n a.title {\n display: flex;\n }\n\n .ant-btn:hover,\n .ant-btn:focus {\n color: ${flamingo};\n border-color: ${flamingo};\n }\n\n .walletConnector {\n background-color: white;\n color: rgba(0, 0, 0, 0.85);\n border: 1px solid rgba(0, 0, 0, 0.85);\n border-radius: 3px;\n font-weight: 300;\n\n &:hover {\n background-color: white;\n transition: all 0.2s ease;\n color: ${flamingo};\n border-color: ${flamingo};\n background-image: none;\n }\n\n &.hidden {\n visibility: hidden;\n }\n }\n`;\n\nconst CustomHeader = styled.div`\n .ant-layout-header {\n height: 8em;\n background: white;\n max-width: 960px;\n margin: 0 auto;\n padding: 0 10px;\n }\n .titleRed {\n color: ${flamingo};\n }\n .ant-divider-vertical {\n top: 1.3em;\n height: 1.6em;\n border-left: 2px solid rgba(0, 0, 0, 0.2);\n }\n`;\n\nconst FixedHeader = styled.div`\n position: fixed;\n z-index: 10;\n width: 100%;\n box-shadow: 0px 1px 0px rgba(0, 0, 0, 0.06);\n background: white;\n`;\n\nconst ButtonWrapper = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 10px;\n\n .envLabel {\n color: ${flamingo};\n font-weight: bold;\n }\n`;\n","import { useEffect, useState } from 'react';\nimport ConfettiExplosion from '@reonomy/react-confetti-explosion';\nimport styled from 'styled-components';\nimport { sleep } from '../../utils';\n\nconst windowHeight = window.innerHeight;\nconst windowWidth = window.innerWidth;\n\nexport default function Confetti() {\n const [exploding, setExploding] = useState(true);\n\n useEffect(() => {\n async function explode() {\n await sleep(3000);\n setExploding(false);\n }\n\n explode();\n }, []);\n\n return exploding ? (\n \n \n \n ) : null;\n}\n\nconst Container = styled.div`\n position: fixed;\n z-index: 9999;\n top: 20%;\n left: 50%;\n width: 0;\n height: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 1;\n`;\n","import { useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport { Typography } from 'antd';\n\nimport { flamingo } from '../colors';\n\nconst { Title } = Typography;\n\nconst kaomojis = [\n '(* ^ ω ^)',\n '( ´ ω ` )ノ゙',\n '(☆▽☆)',\n '(„• ᴗ •„)',\n '(ノ◕ヮ◕)ノ*',\n '(─‿‿─)',\n '(´。• ᵕ •。`)',\n 'ヽ(*・ω・)ノ',\n '(o・ω・o)',\n '(⌒ω⌒)',\n '(*≧ω≦*)',\n];\n\ninterface IProps {\n message?: React.ReactNode;\n}\n\nexport default function KaomojiLoader({ message }: IProps) {\n const [counter, setCounter] = useState(0);\n const [kaomoji, setKaomoji] = useState(kaomojis[0]);\n\n useEffect(() => {\n let i = 0;\n let interval = setInterval(() => {\n setCounter(i++);\n }, 500);\n\n return () => {\n clearInterval(interval);\n };\n }, []);\n\n useEffect(() => {\n if (counter % 4 === 0) {\n setKaomoji(kaomojis[randomIndex(kaomojis.length)]);\n }\n }, [counter]);\n\n return (\n \n \n \n {kaomoji}\n \n \n {'・'.repeat(counter % 4)}\n \n \n \n {message}\n \n \n );\n}\n\nconst Container = styled.div`\n position: fixed;\n z-index: 9;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.65);\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n\n .red {\n color: ${flamingo};\n font-size: 60px;\n }\n\n .message {\n font-weight: bold;\n color: ${flamingo};\n font-size: 30px;\n }\n`;\n\nconst Row = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n`;\n\nconst Kaomoji = styled.div`\n width: 300px;\n text-align: center;\n`;\n\nconst Dots = styled.div`\n width: 100px;\n`;\n\nfunction randomIndex(length: number): number {\n return Math.ceil(Math.random() * length) - 1;\n}\n","import { useEffect, useState } from 'react';\nimport { Typography } from 'antd';\n\nimport { usePaymentContract } from '../../hooks';\nimport { SECOND_MILLIS } from '../../constants';\n\nconst { Text } = Typography;\n\nexport default function NftCounter() {\n const { fetchState } = usePaymentContract();\n const [itemsLeft, setItemsLeft] = useState(0);\n\n useEffect(() => {\n async function refreshCount() {\n const state = await fetchState();\n setItemsLeft(state.maxCount - state.count);\n }\n\n const intervalId = setInterval(refreshCount, 10 * SECOND_MILLIS);\n refreshCount();\n\n return () => {\n clearInterval(intervalId);\n };\n }, [fetchState]);\n\n return (\n \n Hurry up, there's only {itemsLeft} NFTs left to mint!\n \n );\n}\n","// credit to https://github.com/ricardo-ch/react-easy-crop and https://codesandbox.io/s/q8q1mnr01w?file=/src/cropImage.js\n\nconst createImage = (url: string): Promise =>\n new Promise((resolve, reject) => {\n const image = new Image();\n image.addEventListener('load', () => resolve(image));\n image.addEventListener('error', (error) => reject(error));\n image.setAttribute('crossOrigin', 'anonymous'); // needed to avoid cross-origin issues on CodeSandbox\n image.src = url;\n });\n\nfunction getRadianAngle(degreeValue: number) {\n return (degreeValue * Math.PI) / 180;\n}\n\n// This function was adapted from the one in the ReadMe of https://github.com/DominicTobias/react-image-crop\nexport default async function getCroppedImg(\n imageSrc: any,\n pixelCrop: { width: number; height: number; x: number; y: number },\n rotation = 0\n) {\n const image = await createImage(imageSrc);\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n\n const maxSize = Math.max(image.width, image.height);\n const safeArea = 2 * ((maxSize / 2) * Math.sqrt(2));\n\n // set each dimensions to double largest dimension to allow for a safe area for the\n // image to rotate in without being clipped by canvas context\n canvas.width = safeArea;\n canvas.height = safeArea;\n\n // translate canvas context to a central location on image to allow rotating around the center.\n ctx!.translate(safeArea / 2, safeArea / 2);\n ctx!.rotate(getRadianAngle(rotation));\n ctx!.translate(-safeArea / 2, -safeArea / 2);\n\n // draw rotated image and store data.\n ctx!.drawImage(image, safeArea / 2 - image.width * 0.5, safeArea / 2 - image.height * 0.5);\n const data = ctx!.getImageData(0, 0, safeArea, safeArea);\n\n // set canvas width to final desired crop size - this will clear existing context\n canvas.width = pixelCrop.width;\n canvas.height = pixelCrop.height;\n\n // paste generated rotate image with correct offsets for x,y crop values.\n ctx!.putImageData(\n data,\n Math.round(0 - safeArea / 2 + image.width * 0.5 - pixelCrop.x),\n Math.round(0 - safeArea / 2 + image.height * 0.5 - pixelCrop.y)\n );\n\n // As Base64 string\n const mimeType = 'image/jpeg';\n return { dataUrl: canvas.toDataURL(mimeType), mimeType };\n\n // As a blob\n // return new Promise((resolve) => {\n // canvas.toBlob((file) => {\n // resolve(URL.createObjectURL(file));\n // }, 'image/jpeg');\n // });\n}\n","import { useCallback, useState } from 'react';\nimport styled from 'styled-components';\nimport { Typography, Upload, Modal, Button, Space } from 'antd';\nimport { CloudUploadOutlined } from '@ant-design/icons';\nimport Cropper from 'react-easy-crop';\n\nimport { fileToDataUrl, srcToFile } from '../../utils';\nimport getCroppedImg from './cropImage';\nimport { NftCounter } from '../shared';\n\nconst { Dragger } = Upload;\nconst { Title, Text } = Typography;\n\ninterface IProps {\n disabled: boolean;\n onUploadDone: (selfie: File) => void;\n}\n\nexport default function ImageUploader({ disabled, onUploadDone }: IProps) {\n const [dataUrl, setDataUrl] = useState();\n const [showCropper, setShowCropper] = useState(false);\n const [crop, setCrop] = useState({ x: 0, y: 0 });\n const [zoom, setZoom] = useState(1);\n const [croppedAreaPixels, setCroppedAreaPixels] = useState(null);\n\n const handleCropComplete = useCallback((croppedArea, croppedAreaPixels) => {\n setCroppedAreaPixels(croppedAreaPixels);\n }, []);\n\n const handleCustomRequest = useCallback(\n async ({ file, onSuccess, onError }: { file: File; onSuccess: Function; onError: Function }) => {\n const du = await fileToDataUrl(file);\n setDataUrl(du);\n setShowCropper(true);\n },\n []\n );\n\n const handleCancel = useCallback(() => {\n setShowCropper(false);\n setDataUrl('');\n }, []);\n\n const handleSubmit = useCallback(async () => {\n setShowCropper(false);\n const cropResult = await getCroppedImg(dataUrl, croppedAreaPixels);\n const file = await srcToFile(cropResult.dataUrl, 'selfie.jpg', cropResult.mimeType);\n onUploadDone(file);\n setDataUrl('');\n }, [croppedAreaPixels, dataUrl, onUploadDone]);\n\n const footer = (\n
\n \n \n For best results, your selfie should be a face-and-shoulders shot, directly facing the camera. Try as many\n images as you wish.\n \n
\n \n \n
\n
\n
\n );\n\n return (\n <>\n \n

\n \n

\n (=^・ω・^=)\n Upload a Selfie Here\n \n
\n
\n

Photos you upload will NOT BE PUBLISHED

\n \n \n \n \n \n \n \n );\n}\n\nconst CropperContainer = styled.div`\n position: relative;\n width: 350px;\n height: 350px;\n`;\n\nconst Footer = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n text-align: center;\n\n .text12 {\n font-size: 12px;\n }\n`;\n","import styled from 'styled-components';\nimport { Typography } from 'antd';\n\nimport { flamingo } from '../colors';\n\nconst { Text, Title } = Typography;\n\nexport default function SoldOut() {\n return (\n \n \n ・゚・(。{'>'}ω{'<'}。)・゚・\n \n SOLD OUT!\n \n );\n}\n\nconst Container = styled.div`\n height: 100%;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n\n .red {\n font-size: 40px;\n color: ${flamingo};\n }\n .text {\n font-size: 46px;\n font-weight: bold;\n margin: 8px;\n }\n`;\n","import { useCallback, useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport { Layout, Image } from 'antd';\nimport { useHistory } from 'react-router-dom';\n\nimport { usePaymentContract, useWaifu } from '../../hooks';\nimport { flamingo } from '../colors';\nimport { AppHeader } from '../shared';\nimport ImageUploader from './ImageUploader';\nimport SoldOut from './SoldOut';\n\nconst { Content } = Layout;\n\nexport default function MainHeader() {\n const history = useHistory();\n const { onUpdateState } = useWaifu();\n const { fetchState } = usePaymentContract();\n const [ready, setReady] = useState(false);\n const [soldOut, setSoldOut] = useState(false);\n\n const handleSelfieUploadDone = useCallback(\n async (selfie: File) => {\n onUpdateState(\n {\n selfie,\n },\n true\n );\n history.push('/mint');\n },\n [history, onUpdateState]\n );\n\n useEffect(() => {\n async function init() {\n const state = await fetchState();\n setReady(true);\n if (state.count >= state.maxCount) {\n setSoldOut(true);\n }\n }\n\n init();\n }, [fetchState]);\n\n return (\n \n \n \n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n {soldOut ? : }\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n
\n
\n
\n );\n}\n\nconst CustomContent = styled.div`\n .ant-layout-content {\n max-width: 1280px;\n margin: 8em auto 0 auto;\n }\n .titleRed {\n color: ${flamingo};\n }\n .grid-wrapper {\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n .grid-layout {\n flex-grow: 0;\n flex-shrink: 0;\n display: grid;\n width: 1280px;\n grid-template-columns: repeat(auto-fill, minmax(8em, auto));\n grid-auto-rows: minmax(8em, auto);\n grid-gap: 0px;\n }\n .span-1 {\n grid-column-end: span 8;\n grid-row-end: span 4;\n margin: 2em;\n }\n .span-2 {\n grid-column-end: span 2;\n grid-row-end: span 2;\n height: 160px;\n }\n .selfie,\n .waifu {\n position: absolute;\n transition: 0.5s;\n }\n\n .waifu:hover {\n opacity: 0;\n }\n`;\n","import styled from 'styled-components';\nimport { Typography, Layout, Row, Col, Button, Image, Card } from 'antd';\nimport { TwitterCircleFilled, GithubFilled } from '@ant-design/icons';\nimport { flamingo, whitesmoke } from '../colors';\n\nconst { Content } = Layout;\nconst { Title, Text } = Typography;\n\nexport default function MainContent() {\n return (\n \n \n \n \n
\n ディープワイフについて\n \n About DeepWaifu\n \n
\n \n No Waifu... No Laifu!
\n Using deep neural networks this website can make the perfect Waifu just for you!\n
\n
\n \n \n \n (=^・ω・^=)\n Upload Selfie\n \n Let a non-human artist draw your anime-style portrait.\n \n \n (´。• ω •。`)\n Mint NFT\n \n Trade exlusive, high-quality NFTs minted on the blockchain.\n
\n Powered by\n \n \n \n
\n \n \n ヽ(*・ω・)ノ\n Order Pillow\n \n Get your Waifu printed in full color on both sides of a pillow.\n \n
\n
\n \n
\n \n
\n 養子縁組証明書\n \n Certificate\n \n
\n \n If having an NFT of your Waifu is not enough, you can print your Certificate of Adoption.\n \n
\n \n \n \n \n \n
\n \n \n
\n 私たちと連絡を取る\n \n Get in touch\n \n
\n Follow us on Twitter and Github to find out more about DeepWaifu.\n
\n
\n \n \n \n \n \n \n
\n
\n
\n );\n}\n\nconst CustomContent = styled.div`\n .ant-layout-content {\n text-align: center;\n max-width: 960px;\n margin: 0 auto;\n }\n .text18 {\n font-size: 18px;\n }\n .titleRed {\n color: ${flamingo};\n }\n .titleJumbo {\n font-family: 'Hachi Maru Pop', cursive;\n font-style: normal;\n font-weight: normal;\n font-size: 48px;\n line-height: 28px;\n color: rgba(38, 38, 38, 0.1);\n margin-top: 0.5em !important;\n }\n .head {\n position: relative;\n }\n #overlay {\n position: relative;\n top: -1.5em;\n left: 0;\n margin: 0;\n }\n .ant-btn {\n color: ${flamingo};\n border-color: black;\n }\n .ant-btn:hover {\n color: ${flamingo};\n border-color: ${flamingo};\n }\n .iconSocial {\n font-size: 36px;\n margin: 0 0.5em;\n color: black;\n }\n`;\n\nconst Features = styled.div`\n margin: 3em auto 0 auto;\n padding-bottom: 3em;\n max-width: 960px;\n background: ${whitesmoke};\n\n .solana {\n margin-top: 2em;\n }\n\n .ant-col-8 {\n padding: 2em 4em;\n }\n .titleFeaturesRed {\n font-size: 16px;\n color: ${flamingo};\n }\n .titleFeatures {\n font-size: 16px;\n }\n .text16 {\n font-size: 16px;\n }\n .text12 {\n font-size: 12px;\n }\n .ant-image {\n margin: 1em 0;\n }\n`;\n\nconst TextBlock = styled.div`\n margin: 6em 0 1em 0;\n`;\n\nconst Certificate = styled.div`\n margin: 3em 0 1em;\n\n .ant-card-body {\n padding: 1em;\n }\n`;\n","import styled from 'styled-components';\nimport { Typography, Layout, Divider } from 'antd';\n\nconst { Footer } = Layout;\nconst { Text } = Typography;\n\nexport default function MainFooter() {\n return (\n \n \n
\n \n Terms of Service • Privacy Statement\n
\n
\n
\n );\n}\n\nconst CustomFooter = styled.div`\n .ant-layout-footer {\n text-align: center;\n background: white;\n max-width: 960px;\n margin: 0 auto 2em;\n padding: 0 1em;\n }\n`;\n","import styled from 'styled-components';\nimport { Image } from 'antd';\n\nimport { useWaifu } from '../../hooks';\n\nexport default function PillowMockup() {\n const { state } = useWaifu();\n\n return (\n \n \n \n \n \n \n \n \n );\n}\n\nconst Container = styled.div`\n position: relative;\n width: 180px;\n height: 180px;\n`;\n\nconst PillowBase = styled.div`\n position: relative;\n top: 0;\n left: 0;\n`;\n\nconst PillowImage = styled.div`\n position: absolute;\n top: -3px;\n left: 0;\n mix-blend-mode: multiply;\n\n mask-image: url('../img/pillow-mask.png');\n mask-size: 180px;\n mask-repeat: no-repeat;\n mask-position: center;\n`;\n","import { useCallback, useState } from 'react';\nimport styled from 'styled-components';\nimport { Typography, Card, Space, Button, message } from 'antd';\n\nimport { flamingo } from '../colors';\nimport { apiService } from '../../services';\nimport { useWaifu } from '../../hooks';\nimport PillowMockup from './PillowMockup';\n\nconst { Title, Text } = Typography;\n\nexport default function OrderPillow() {\n const { state } = useWaifu();\n const [loading, setLoading] = useState(false);\n const handleOrderIntent = useCallback(async () => {\n setLoading(true);\n try {\n const { checkoutUrl } = await apiService.createStripeCheckoutIntent({\n name: state.name || 'Waifu',\n image: state.waifu!,\n });\n\n window.open(checkoutUrl, '_blank');\n } catch (e) {\n message.error('Something went wrong');\n } finally {\n setLoading(false);\n }\n }, [state]);\n\n return (\n \n \n \n
\n ヽ(*・ω・)ノ\n Order Pillow\n
\n \n \n Get your DeepWaifu printed on both sides of a 18\"x18\" pillow in full color. The pillows are soft yet\n durable, made from 100% spun polyester poplin fabric.\n \n \n Free shipment to Europe, USA, Canada, Japan\n \n \n
\n
\n
\n );\n}\n\nconst Container = styled.div`\n position: relative;\n top: 0;\n left: 0;\n text-align: center;\n background: none;\n\n .ant-card-body {\n padding: 0 2em;\n }\n\n .ant-card {\n background: none;\n }\n .ant-btn {\n color: ${flamingo};\n border-color: black;\n }\n .ant-btn:hover {\n color: ${flamingo};\n border-color: ${flamingo};\n }\n\n .space {\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n`;\n","import styled from 'styled-components';\nimport { Typography, Layout, Row, Col } from 'antd';\nimport queryString from 'query-string';\n\nimport { flamingo, whitesmoke } from '../colors';\nimport { AppHeader, Confetti } from '../shared';\nimport PillowMockup from './PillowMockup';\n\nconst { Content } = Layout;\nconst { Title, Text } = Typography;\n\nconst { paymentId, orderId } = queryString.parse(window.location.search);\n\nexport default function OrderSuccess() {\n return (\n \n \n \n \n \n \n (*☆ω☆)\n  Your DeepWaifu pillow is on its way!\n \n \n \n \n \n \n \n \n \n Your payment id: {paymentId}\n \n \n Your order id: {orderId}\n \n \n \n \n \n You can safely close this window now\n \n \n \n \n \n );\n}\n\nconst CustomContent = styled.div`\n background: ${whitesmoke};\n\n .ant-layout-content {\n max-width: 960px;\n margin: 8em auto 4em auto;\n padding: 0 10px;\n }\n\n .mainTitle {\n display: flex;\n padding: 1em 0 2em;\n }\n .titleRed {\n color: ${flamingo};\n }\n\n .centerFlex {\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n\n .pillowContainer {\n margin-top: 10em;\n margin-bottom: 12em;\n > div {\n transform: scale(2);\n }\n }\n\n .orderDetails {\n font-size: 16px;\n line-height: 32px;\n margin-bottom: 2em;\n }\n\n .note {\n font-size: 12px;\n font-style: italic;\n }\n`;\n","import styled from 'styled-components';\nimport { Typography, Layout, Row, Col } from 'antd';\n\nimport { flamingo, whitesmoke } from '../colors';\nimport { AppHeader } from '../shared';\nimport PillowMockup from './PillowMockup';\n\nconst { Content } = Layout;\nconst { Title, Text } = Typography;\n\nexport default function OrderError() {\n return (\n \n \n \n \n \n \n ・゚・(。{'>'}ω{'<'}。)・゚・\n \n  Oops, something went wrong with your order!\n \n \n \n Please try again!\n \n \n \n \n \n \n \n \n \n You can safely close this window now\n \n \n \n \n \n );\n}\n\nconst CustomContent = styled.div`\n background: ${whitesmoke};\n min-height: 100vh;\n\n .ant-layout-content {\n max-width: 960px;\n margin: 8em auto 4em auto;\n padding: 0 10px;\n }\n\n .mainTitle {\n display: flex;\n padding: 1em 0 2em;\n }\n .titleRed {\n color: ${flamingo};\n }\n\n .centerFlex {\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n\n .pillowContainer {\n margin-top: 4em;\n margin-bottom: 6em;\n }\n\n .note {\n font-size: 12px;\n font-style: italic;\n }\n`;\n","export default __webpack_public_path__ + \"static/media/solana-icon.2dc78b21.svg\";","import { useMemo } from 'react';\nimport styled from 'styled-components';\nimport { Typography, Space, Image, Row, Col, Card } from 'antd';\n\nimport { flamingo, bluegrey } from '../colors';\n\nconst { Title, Text } = Typography;\n\ninterface IProps {\n className?: string;\n waifuDataUrl: string;\n name: string;\n id: number;\n holder: string;\n}\n\nexport default function Certificate({ className, waifuDataUrl, name, id, holder }: IProps) {\n const nameSize = useMemo(() => {\n const nameLength = (name || '').length || 0;\n if (nameLength <= 8) {\n return 'xl';\n } else if (nameLength <= 12) {\n return 'l';\n } else if (nameLength <= 16) {\n return 'm';\n } else if (nameLength <= 20) {\n return 's';\n } else {\n return 'xs';\n }\n }, [name]);\n\n return (\n \n \n }>\n \n \n \n \n \n \n \n \n Certificate of Adoption\n 養子縁組証明書\n \n Let it be known to all that the holder of the DeepWaifu known by the name of\n \n {name}\n \n has agreed to provide a loving home for this waifu and promised to keep it safe.\n \n \n Token ID: {String(id).padStart(4, '0')}\n \n \n Holder: {holder}\n \n \n \n \n \n \n );\n}\n\nconst Overlay = styled.div`\n position: relative;\n top: 0;\n left: 0;\n overflow: hidden;\n`;\n\nconst CertificateBase = styled.div`\n text-align: center;\n position: relative;\n top: 0;\n left: 0;\n\n .ant-card-body {\n display: none;\n }\n .ant-card-cover,\n .ant-card-bordered {\n height: 451px;\n }\n`;\n\nconst CertificateImage = styled.div`\n position: absolute;\n top: 140px;\n left: 70px;\n transform: rotate(-14.5deg);\n mix-blend-mode: multiply;\n`;\n\nconst TextBlock = styled.div`\n position: absolute;\n top: 0px;\n left: 365px;\n transform: rotate(-14.5deg);\n text-align: center;\n mix-blend-mode: multiply;\n\n .space {\n width: 232px;\n }\n\n .titleName {\n font-family: Hachi Maru Pop;\n font-style: normal;\n font-weight: normal;\n line-height: 36px;\n color: ${flamingo};\n white-space: nowrap;\n\n &.xl {\n font-size: 28px;\n }\n &.l {\n font-size: 22px;\n }\n &.m {\n font-size: 18px;\n }\n &.s {\n font-size: 14px;\n }\n &.xs {\n font-size: 12px;\n }\n }\n .text14 {\n color: ${bluegrey};\n }\n\n .text10 {\n font-size: 10px;\n white-space: nowrap;\n display: inline-block;\n\n &.first {\n margin-top: 16px;\n }\n }\n`;\n","import { useCallback, useMemo } from 'react';\nimport styled from 'styled-components';\nimport { Typography, Layout, Space, Button, Row, Col } from 'antd';\nimport { FilePdfFilled } from '@ant-design/icons';\nimport jsPdf from 'jspdf';\nimport { useHistory } from 'react-router-dom';\n\nimport { SHARE_URL, SOLANA_ENV } from '../../env';\nimport { useWaifu } from '../../hooks';\nimport sol from '../../img/solana-icon.svg';\nimport { flamingo, whitesmoke, bluegrey } from '../colors';\nimport { AppHeader, Confetti } from '../shared';\nimport { OrderPillow } from '../pillow';\nimport { htmlToDataUrl } from '../../utils';\nimport Certificate from './Certificate';\n\nconst { Content } = Layout;\nconst { Title } = Typography;\n\nexport default function CertificateHeader() {\n const history = useHistory();\n const { state, onResetState } = useWaifu();\n\n const handlePrintPDF = useCallback(async () => {\n const dataUrl = await htmlToDataUrl('#certificate', 2);\n printPDF(dataUrl);\n }, []);\n\n const handleReset = useCallback(async () => {\n onResetState();\n history.push('/');\n }, [history, onResetState]);\n\n const tweetUrl = useMemo(() => {\n const certId = state.certificateLink?.split('/').reverse()[0];\n return `https://twitter.com/intent/tweet?text=Check%20out%20my%20%23DeepWaifu!%20%0A%0A${SHARE_URL}/c/${certId}`;\n }, [state.certificateLink]);\n\n return (\n \n \n \n \n \n \n (´。• ω •。`)\n  Your DeepWaifu NFT has been listed!\n \n \n \n \n
\n
\n \n \n
\n \n \n \n \n
\n
\n \n }\n href={`https://explorer.solana.com/tx/${state.tx}?cluster=${SOLANA_ENV}`}\n target=\"_blank\"\n rel=\"noreferer noopener\"\n >\n View on Solana Explorer\n \n \n \n
\n
\n
\n \n \n \n \n
\n
\n
\n
\n );\n}\n\nfunction printPDF(dataUrl: string) {\n const pdf = new jsPdf({\n orientation: 'landscape',\n unit: 'px',\n format: [1280, 902],\n });\n const pdfWidth = pdf.internal.pageSize.getWidth();\n const pdfHeight = pdf.internal.pageSize.getHeight();\n pdf.addImage(dataUrl, 'JPEG', 0, 0, pdfWidth, pdfHeight);\n pdf.save(`certificate_of_adoption_${new Date().toISOString()}.pdf`);\n}\n\nconst Mint = styled.div`\n text-align: center;\n margin: 2em 0;\n\n .ant-switch {\n background-color: ${flamingo};\n }\n .ant-switch-checked {\n background-color: black;\n }\n .ant-switch-checked:focus {\n box-shadow: 0 0 0 2px rgb(235 87 87 / 20%);\n }\n .mintBtn {\n display: block;\n }\n`;\n\nconst CustomContent = styled.div`\n background: ${whitesmoke};\n\n .ant-layout-content {\n max-width: 960px;\n margin: 8em auto 0 auto;\n padding: 0 10px;\n }\n .ant-input:hover,\n .ant-input:focus,\n .ant-input-focused {\n border-color: ${flamingo};\n box-shadow: 0 0 0 2px rgb(235 87 87 / 20%);\n }\n\n .mainTitle {\n display: flex;\n padding: 1em 0 2em;\n }\n\n .certificate {\n text-align: center;\n }\n\n .titleFeaturesRed {\n font-size: 16px;\n color: ${flamingo};\n }\n .titleFeatures {\n font-size: 16px;\n }\n .titleRed {\n color: ${flamingo};\n }\n .title30 {\n font-size: 30px;\n margin: 0px;\n margin-top: 0px !important;\n color: ${bluegrey};\n }\n .titleJumbo {\n font-family: Hachi Maru Pop;\n font-style: normal;\n font-weight: normal;\n font-size: 18px;\n line-height: 36px;\n color: ${flamingo};\n }\n .text14 {\n font-size: 14px;\n }\n .text12 {\n font-size: 12px;\n }\n .text8 {\n font-size: 8px;\n color: ${bluegrey};\n }\n .flow {\n flex-flow: initial;\n }\n`;\n","import { useCallback, useEffect, useState } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport styled from 'styled-components';\nimport { Typography, Space, Button, Image, Row, Col, Card, Input, Switch, Form, message } from 'antd';\nimport { useWallet } from '@solana/wallet-adapter-react';\nimport { useWalletModal } from '@solana/wallet-adapter-react-ui';\nimport * as anchor from '@project-serum/anchor';\nimport { LAMPORTS_PER_SOL } from '@solana/web3.js';\n\nimport { usePaymentContract, useWaifu } from '../../hooks';\nimport { htmlToDataUrl, sleep, srcToFile } from '../../utils';\nimport { apiService } from '../../services';\nimport { LAMPORTS_PER_DAY, SECOND_MILLIS } from '../../constants';\nimport { IMintStatus } from '../../types';\nimport { flamingo } from '../colors';\nimport { Certificate } from '../certificate';\nimport { NftCounter } from '../shared';\nimport { KaomojiLoader } from '../shared';\n\nconst { Title, Text } = Typography;\n\ninterface ICertificateParams {\n id: number;\n name: string;\n holder: string;\n}\n\nconst emailRegex =\n /^([a-zA-Z0-9_\\-+.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9-]+\\.)+))([a-zA-Z]{2,10}|[0-9]{1,3})(\\]?)$/i;\nconst MAX_NAME_LENGTH = 24;\n\nexport default function MintForm() {\n const history = useHistory();\n const [form] = Form.useForm();\n const { state, onUpdateState, onResetState } = useWaifu();\n const { publicKey, connected } = useWallet();\n const { setVisible } = useWalletModal();\n const { payForMint, fetchState } = usePaymentContract();\n const [resumeMint, setResumeMint] = useState(false);\n const [paying, setPaying] = useState(false);\n const [minting, setMinting] = useState(false);\n const [priceSol, setPriceSol] = useState(0);\n const [priceDay, setPriceDay] = useState(0);\n const [dayPayment, setDayPayment] = useState(false);\n const [certificateParams, setCertificateParams] = useState({} as any);\n\n const waitForMint = useCallback(async (tx: string): Promise => {\n return new Promise(async (resolve, reject) => {\n try {\n while (true) {\n await sleep(3 * SECOND_MILLIS);\n const res = await apiService.mintStatus(tx);\n if (res.status === 'minted') {\n return resolve(res);\n } else if (res.status === 'error') {\n return reject(new Error(res.message));\n }\n }\n } catch (e) {\n reject(e);\n }\n });\n }, []);\n\n const getCertificateFile = useCallback(async (params: ICertificateParams) => {\n setCertificateParams(params);\n await sleep(100); // give time to rerender\n const dataUrl = await htmlToDataUrl('#certificate');\n\n return srcToFile(dataUrl, 'certificate.png', 'image/png');\n }, []);\n\n const handleMint = useCallback(async () => {\n const { name, email } = await form.validateFields();\n\n if (!connected) {\n setResumeMint(true);\n return setVisible(true);\n }\n\n try {\n (window as any).heap.identify(email);\n } catch (e) {\n console.error(e as any);\n }\n\n try {\n setPaying(true);\n const { tx, payer, id } = await payForMint(dayPayment);\n message.success('Payment successful!');\n setMinting(true);\n const certificate = await getCertificateFile({ id, name, holder: payer });\n await apiService.mint({ tx, waifu: state.waifu!, certificate, name });\n const res = await waitForMint(tx);\n\n onUpdateState({\n id: res.id,\n tx: res.tx,\n metadataLink: res.metadataLink,\n certificateLink: res.certificateLink,\n name,\n holder: publicKey?.toBase58(),\n });\n\n message.success('Your Waifu has been minted!');\n history.push('/certificate');\n } catch (e) {\n message.error((e as any).message);\n } finally {\n setPaying(false);\n setMinting(false);\n }\n }, [\n connected,\n dayPayment,\n form,\n getCertificateFile,\n history,\n onUpdateState,\n payForMint,\n publicKey,\n setVisible,\n state.waifu,\n waitForMint,\n ]);\n\n useEffect(() => {\n if (connected && resumeMint) {\n setResumeMint(false);\n handleMint();\n }\n }, [connected, handleMint, resumeMint]);\n\n const handleReset = useCallback(() => {\n onResetState();\n history.push('/');\n }, [history, onResetState]);\n\n useEffect(() => {\n async function fetchPrices() {\n const state = await fetchState();\n setPriceSol(state.priceLamports.mul(new anchor.BN(100)).div(new anchor.BN(LAMPORTS_PER_SOL)).toNumber() / 100);\n setPriceDay(state.priceDay.mul(new anchor.BN(100)).div(new anchor.BN(LAMPORTS_PER_DAY)).toNumber() / 100);\n }\n\n fetchPrices();\n }, [fetchState]);\n\n return (\n
\n {minting && }\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Certificate of Adoption\n 養子縁組証明書\n \n Let it be known to all that the holder of the DeepWaifu known by the name of\n \n \n \n \n \n has agreed to provide a loving home for this waifu and promised to keep it safe.\n \n \n \n \n Your email will be kept private\n \n \n \n \n \n \n \n
\n \n \n \n setDayPayment(!checked)}\n />\n \n \n
\n \n \n
\n
\n \n \n \n \n );\n}\n\nconst CertificateForm = styled.div`\n text-align: center;\n`;\n\nconst SwitchWrapper = styled.div`\n min-width: 110px;\n`;\n\nconst CertificateImage = styled.div`\n .certImage {\n width: 310px;\n height: 310px;\n margin: 0 3em 1em 0;\n }\n .ant-card-body {\n padding: 1em;\n }\n`;\n\nconst MintButtonWrapper = styled.div`\n text-align: center;\n margin: 2em 0;\n\n .ant-switch {\n background-color: ${flamingo};\n }\n .ant-switch-checked {\n background-color: black;\n }\n .ant-switch-checked:focus {\n box-shadow: 0 0 0 2px rgb(235 87 87 / 20%);\n }\n .solLogo {\n margin-top: 2px;\n }\n`;\n\nconst CertificateContainer = styled.div`\n flex-grow: 0;\n flex-shrink: 0;\n width: 640px;\n height: 451px;\n position: absolute;\n left: -9000px;\n top: -9000px;\n\n .certificate {\n position: absolute;\n }\n`;\n","import styled from 'styled-components';\nimport { Typography, Layout, Row, Col } from 'antd';\n\nimport { flamingo, whitesmoke } from '../colors';\nimport { useWaifu } from '../../hooks';\nimport { AppHeader, KaomojiLoader } from '../shared';\nimport { OrderPillow } from '../pillow';\nimport MintForm from './MintForm';\n\nconst { Content } = Layout;\nconst { Title } = Typography;\n\nexport default function GeneratorHeader() {\n const { state } = useWaifu();\n const loading = !!state.selfieDataUrl && !state.waifuDataUrl;\n\n return (\n \n \n {loading && }\n \n \n \n {!loading && (\n <>\n (´。• ω •。`)\n  Here’s your DeepWaifu!\n \n )}\n {loading && (\n <>\n ( ☆ ω ☆ )\n  Generating your DeepWaifu...\n \n )}\n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nconst CustomContent = styled.div`\n background: ${whitesmoke};\n\n .ant-layout-content {\n max-width: 960px;\n margin: 8em auto 0 auto;\n padding: 0 10px;\n }\n .ant-input:hover,\n .ant-input:focus,\n .ant-input-focused {\n border-color: ${flamingo};\n box-shadow: 0 0 0 2px rgb(235 87 87 / 20%);\n }\n\n .mainTitle {\n display: flex;\n padding: 1em 0 2em;\n }\n\n .titleFeaturesRed {\n font-size: 16px;\n color: ${flamingo};\n }\n .titleFeatures {\n font-size: 16px;\n }\n .titleRed {\n color: ${flamingo};\n }\n .title30 {\n font-size: 30px;\n margin: 0px;\n margin-top: 0px !important;\n }\n .titleJumbo {\n font-family: Hachi Maru Pop;\n font-style: normal;\n font-weight: normal;\n font-size: 18px;\n line-height: 36px;\n color: ${flamingo};\n }\n .text14 {\n font-size: 14px;\n }\n .text12 {\n font-size: 12px;\n }\n .flow {\n flex-flow: initial;\n\n &.blur {\n filter: blur(10px);\n }\n }\n`;\n","import { useMemo } from 'react';\nimport { ConnectionProvider, WalletProvider } from '@solana/wallet-adapter-react';\nimport {\n getLedgerWallet,\n getPhantomWallet,\n getSlopeWallet,\n getSolflareWallet,\n getSolletExtensionWallet,\n getSolletWallet,\n getTorusWallet,\n} from '@solana/wallet-adapter-wallets';\nimport { WalletModalProvider } from '@solana/wallet-adapter-react-ui';\nimport { clusterApiUrl } from '@solana/web3.js';\n\nimport { SOLANA_ENV } from './env';\n\ninterface IProps {\n children: React.ReactNode;\n}\n\nexport default function SolanaProviders({ children }: IProps) {\n const network = useMemo(() => SOLANA_ENV, []);\n const endpoint = useMemo(() => clusterApiUrl(network), [network]);\n\n // @solana/wallet-adapter-wallets includes all the adapters but supports tree shaking --\n // Only the wallets you configure here will be compiled into your application\n const wallets = useMemo(\n () => [\n getPhantomWallet(),\n getSolflareWallet(),\n getSolletWallet({ network }),\n getSolletExtensionWallet({ network }),\n getSlopeWallet(),\n // getTorusWallet({\n // options: { clientId: 'Get a client ID @ https://developer.tor.us' },\n // }),\n getLedgerWallet(),\n ],\n [network]\n );\n\n return (\n \n \n {children}\n \n \n );\n}\n","import React from 'react';\n\nimport { WaifuProvider } from './contexts';\nimport SolanaProviders from './SolanaProviders';\n\ninterface IProps {\n children: React.ReactNode;\n}\n\nexport default function Providers({ children }: IProps) {\n return (\n \n {children}\n \n );\n}\n","import { createGlobalStyle } from 'styled-components';\nimport { flamingo } from './components/colors';\n\n// weird hack to make prettier recognize css in createGlobalStyle and format it\nconst styled = {\n div: createGlobalStyle,\n};\n\nconst GlobalStyle = styled.div`\n body,\n html {\n font-family: -apple-system, 'PingFangSC', BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell',\n 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\n font-size: 10px;\n font-weight: 300;\n box-sizing: border-box;\n scroll-behavior: smooth;\n\n --antd-wave-shadow-color: ${flamingo};\n }\n\n h1.ant-typography,\n .ant-typography h1 {\n font-family: 'Dela Gothic One', cursive;\n font-weight: 500;\n font-size: 24px;\n margin-top: 0.5em !important;\n }\n\n code {\n font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', monospace;\n }\n .ant-layout {\n background: white;\n }\n .ant-upload.ant-upload-drag p.ant-upload-drag-icon .anticon {\n color: ${flamingo};\n }\n .ant-upload.ant-upload-drag:not(.ant-upload-disabled):hover {\n border-color: ${flamingo};\n }\n .ant-message-info .anticon,\n .ant-message-loading .anticon {\n color: ${flamingo};\n }\n\n .ant-btn-primary:not([disabled]) {\n background: ${flamingo};\n border-color: ${flamingo};\n }\n .ant-btn-primary:not([disabled]):hover,\n .ant-btn-primary:not([disabled]):focus {\n color: white;\n }\n .ant-btn:hover,\n .ant-btn:focus {\n color: ${flamingo};\n border-color: ${flamingo};\n }\n`;\n\nexport default GlobalStyle;\n","import 'antd/dist/antd.css';\nimport React, { Suspense } from 'react';\nimport { BrowserRouter as Router, Route, Switch } from 'react-router-dom';\nimport { Spin } from 'antd';\nimport { LoadingOutlined } from '@ant-design/icons';\nimport styled from 'styled-components';\n\nimport { MainHeader, MainContent, MainFooter } from './components/main';\nimport { GeneratorHeader } from './components/generator';\nimport { CertificateHeader } from './components/certificate';\nimport { OrderError, OrderSuccess } from './components/pillow';\nimport Providers from './Providers';\nimport GlobalStyle from './GlobalStyle';\n\nconst antIcon = ;\n\nclass Wrapper extends React.Component {\n public render() {\n return (\n \n \n \n \n \n \n );\n }\n}\n\nfunction App() {\n return (\n \n \n \n }\n >\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nconst LoaderWrapper = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n height: 100vh;\n`;\n\nexport default Wrapper;\n","import { ReportHandler } from 'web-vitals';\n\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './App';\nimport reportWebVitals from './reportWebVitals';\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"sourceRoot":""}